2

这个问题与Maven 谷歌应用引擎项目中 Datanucleus 增强器的冲突版本有关。我在那里尝试了解决方案并且它有效。但是如果我运行 mvn clean compile 我会得到错误

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project XXX: Fatal error compiling: java.lang.NoClassDefFoundError: org/datanucleus/util/AnnotationProcessorUtils: org.datanucleus.util.AnnotationProcessorUtils.

知道为什么吗?我正在使用 datanucleus-maven-plugin:3.3.0-release。

问题是我有两次 datanucleus-core:一次来自项目依赖项,一次来自插件依赖项。在运行 mvn datanuleus:enhance 后的控制台中,以下行出现两次:

[INFO] CP: /home/user/.m2/repository/org/datanucleus/datanucleus-core/3.2.7/datanucleus-cor‌​e-3.2.7.jar
4

2 回答 2

4

我终于找到了解决方法。这不是最优雅的解决方案,但我认为没有其他解决方案。

解决方法是将 datanucleus-core 依赖项添加到编译器插件(请注意compile范围。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <dependencies>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-core</artifactId>
            <version>3.2.8</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    ...
</plugin>

datanucleus-core 依赖项与runtime范围一起添加

<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-core</artifactId>
    <version>3.2.8</version>
    <scope>runtime</scope>
</dependency>

并且 datanucleus 增强器插件中的 datanucleus-core 默认版本被3.2.8.

<plugin>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-maven-plugin</artifactId>
    <version>3.3.0-release</version>
    <dependencies>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-core</artifactId>
            <version>3.2.8</version>
        </dependency>
    </dependencies>
</plugin>

它也适用于 3.2.9 版本。

于 2013-11-24T20:23:17.513 回答
0

将 datanucleus-core 设置为运行时意味着您不需要它来编译(该线程中的用户需要什么)。您显然想要运行(DataNucleus)注释处理器(预编译),因此必须将其用于编译,因此您设置 datanucleus-maven-plugin 使用的 datanucleus-core 版本(在其对插件的依赖项下) ,因此它与整个 pom.xml 使用的内容相匹配

于 2013-11-01T18:52:27.890 回答