Datanucleus Programmatic API类增强

mar*_*pes 14 java api jdo datanucleus

我正在使用Eclipse 3.7(OSGI),我可以进行手动增强(使用Datanucleus Eclipse插件和datanucleus-enhancer-2.1.0版本作为插件依赖项导入)

我现在正在尝试使用API​​类增强功能:http://www.datanucleus.org/products/accessplatform/jpa/enhancer.html#api

使用ASM 3.1在类路径和此代码中:

DataNucleusEnhancer enhancer=new DataNucleusEnhancer("JDO","ASM");
enhancer.setVerbose(true);
enhancer.addClasses(...);
enhancer.enhance();
Run Code Online (Sandbox Code Playgroud)

我明白了:

You have selected to use ClassEnhancer "ASM" yet the JAR for that enhancer does not seem to be in the CLASSPATH!
org.datanucleus.enhancer.NucleusEnhanceException: You have selected to use ClassEnhancer "ASM" yet the JAR for that enhancer does not seem to be in the CLASSPATH!
    at org.datanucleus.enhancer.DataNucleusEnhancer.init(DataNucleusEnhancer.java:224)
    at org.datanucleus.enhancer.DataNucleusEnhancer.addClasses(DataNucleusEnhancer.java:406)
Run Code Online (Sandbox Code Playgroud)

使用教程中建议的代码:

JDOEnhancer enhancer = JDOHelper.getEnhancer();
enhancer.setVerbose(true);
enhancer.addClasses(...);
enhancer.enhance();
Run Code Online (Sandbox Code Playgroud)

我明白了:

javax.jdo.JDOFatalUserException: There are 0 services entries for the JDOEnhancer; there were no valid JDOEnhancer implementations found in the CLASSPATH. The file META-INF/services/javax.jdo.JDOEnhancer should name the implementation class.
Run Code Online (Sandbox Code Playgroud)

有没有办法实现API类增强?

小智 1

请参阅此链接http://www.datanucleus.org/products/accessplatform_3_0/enhancer.html#runtime

特别是一句:“运行时增强需要以下运行时依赖项:ASM 和 DataNucleus Core 库。”

所以你可能缺少 ASM 依赖。

尝试添加此依赖项:

    <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm</artifactId>
      <version>4.2</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)