14

私は Eclipse 3.7 (OSGI) を使用しており、手動で拡張を行うことができます (プラグインの依存関係としてインポートされた Datanucleus Eclipse プラグインと datanucleus-enhancer-2.1.0-release を使用)。

API Class Enhancement を使用しようとしています: 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();

私は得る:

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)

チュートリアルで提案されているコードを使用すると、次のようになります。

JDOEnhancer enhancer = JDOHelper.getEnhancer();
enhancer.setVerbose(true);
enhancer.addClasses(...);
enhancer.enhance();

私は得る:

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.

API クラスの拡張を実現する方法はありますか?

4

1 に答える 1

1

このリンクを参照してくださいhttp://www.datanucleus.org/products/accessplatform_3_0/enhancer.html#runtime

特に文: 「ランタイム拡張には、次のランタイム依存関係が必要です: ASM、および DataNucleus コア ライブラリ。」

したがって、おそらく ASM 依存関係がありません。

この依存関係を追加してみてください:

    <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm</artifactId>
      <version>4.2</version>
    </dependency>
于 2014-01-24T12:11:01.430 に答える