Java maven中的Datanucleus增强器冲突依赖项-第2部分
这个问题涉及到。我在那里尝试了这个解决方案,效果很好。但是如果我运行mvn clean compile,我会得到错误Java maven中的Datanucleus增强器冲突依赖项-第2部分,java,maven,datanucleus,Java,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
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插件:3.3.0-release
问题是我有两个datanucleus核心:一个来自项目依赖项,另一个来自插件依赖项。在运行mvn datanuleus:Enhanced后的控制台中,以下行显示两次:
[INFO] CP: /home/user/.m2/repository/org/datanucleus/datanucleus-core/3.2.7/datanucleus-core-3.2.7.jar
将datanucleus core设置为runtime意味着您不需要它进行编译(该线程中的用户需要它)。显然,您希望运行(DataNucleus)注释处理器(预编译),因此必须提供该处理器进行编译,因此您可以设置DataNucleus maven插件使用的DataNucleus核心版本(在其插件依赖项下),因此,它与整个pom.xml使用的内容相匹配,将datanucleus core设置为runtime意味着您不需要它进行编译(该线程中的用户需要它)。很明显,您希望运行(DataNucleus)注释处理器(预编译),因此必须提供该处理器进行编译,因此您可以设置DataNucleus maven插件使用的DataNucleus core版本(在其对插件的依赖项下),以便它与整个pom.xml使用的内容相匹配。我终于找到了一个解决方法。这不是最优雅的解决方案,但我认为没有其他解决方案 解决方法是将datanucleus核心依赖项添加到编译器插件(请注意
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 enhancer插件的datanucleus核心默认版本被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>
org.datanucleus
datanucleus maven插件
3.3.0-发布
org.datanucleus
数据核核心
3.2.8
它也适用于3.2.9版。我终于找到了解决方案。这不是最优雅的解决方案,但我认为没有其他解决方案 解决方法是将datanucleus核心依赖项添加到编译器插件(请注意
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 enhancer插件的datanucleus核心默认版本被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>
org.datanucleus
datanucleus maven插件
3.3.0-发布
org.datanucleus
数据核核心
3.2.8
它也适用于3.2.9版。检查此解决方案(使用排除)检查此解决方案(使用排除)我的依赖项和插件依赖项版本相同。问题是我有两次datanucleus核心:一次来自项目依赖项,另一次来自插件依赖项。在运行
mvn datanuleus:enhance
后的控制台中,以下行出现两次:[INFO]CP:/home/user/.m2/repository/org/datanucleus/datanucleus core/3.2.7/datanucleus-core-3.2.7.jar
我所有的项目在pom.xml deps中都有datanucleus core,我也使用m2增强器插件,所以也有相同的插件。为什么要使用两次,可以通过使用“mvn--debug”来确定看看它对这两个entries的起源说了些什么我曾经从插件依赖项本身得到过一次(我覆盖了那里的版本)我有一次是从项目依赖项中获得的。我有相同版本的依赖项和插件依赖项。问题是我有两次datanucleus核心:一次来自项目依赖项,另一次来自插件依赖项。在运行mvn datanuleus:enhance
后的控制台中,以下行出现两次:[INFO]CP:/home/user/.m2/repository/org/datanucleus/datanucleus core/3.2.7/datanucleus-core-3.2.7.jar
我所有的项目在pom.xml deps中都有datanucleus core,我也使用m2增强器插件,所以也有相同的插件。为什么要使用两次,可以通过使用“mvn--debug”来确定看看它对这两个entries的起源说了些什么我从插件依赖项本身(我覆盖了那里的版本)和项目依赖项中得到了一次。