Maven 2 maven编译错误:重复的类
在我的maven2项目中,我有一个目录Maven 2 maven编译错误:重复的类,maven-2,maven-plugin,Maven 2,Maven Plugin,在我的maven2项目中,我有一个目录${basedir}/autogen,其中包含一些由wsdl2java生成的自动生成的源代码文件 当运行mvncile时,我得到了一个编译错误,因为存在于${basedir}/autogen中的重复类。这是真的。但是编译阶段在${basedir}/autogen中做什么呢?我没有告诉maven将此目录添加为源目录。 而且似乎没有办法告诉maven忽略该目录。很难更改默认的maven行为,我认为最好还是这样做——你可以用maven生成这些文件。我已经看过几次了
${basedir}/autogen
,其中包含一些由wsdl2java
生成的自动生成的源代码文件
当运行mvncile
时,我得到了一个编译错误,因为存在于${basedir}/autogen
中的重复类。这是真的。但是编译阶段在${basedir}/autogen
中做什么呢?我没有告诉maven将此目录添加为源目录。
而且似乎没有办法告诉maven忽略该目录。很难更改默认的maven行为,我认为最好还是这样做——你可以用maven生成这些文件。我已经看过几次了。在几乎所有情况下,这都是由于生成的类被添加到主src树中,然后签入版本控制 我在JPA模型生成器上也遇到了类似的问题。它发生在此依赖项上:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa.modelgen</artifactId>
<version>2.1.1</version>
</dependency>
我在使用maven处理器插件时遇到了同样的问题,并发现解决方案是按如下方式配置maven编译器插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-proc:none</compilerArgument>
</configuration>
</plugin>
org.apache.maven.plugins
maven编译器插件
2.1
1.6
1.6
-过程:无
-proc:none意味着编译在没有注释处理的情况下进行,因此没有重复的类(通常在生成源代码阶段生成)
我希望这能有所帮助。我解决了同样的问题
mvn清理
希望对您有所帮助。我通过从pom.xml中删除generateAsync来解决此问题,GWT插件将如图所示
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>${gwtVersion}</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test</goal>
<!-- <goal>i18n</goal> -->
</goals>
</execution>
</executions>
org.codehaus.mojo
GWTMaven插件
${gwtVersion}
编译
测试
我也有同样的问题。在我的例子中,问题是我用-f=./pom.xml
调用了maven。我不知道为什么这会导致不同的结果(如果有人能解释就好了),但如果知道其他人是否也有同样的问题,也许会更好。我的案例帮助了这一点:
<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
javax.annotation
javax.annotation-api
1.3.2
在我的例子中,它在我更改源目录时起作用
新的POM看起来像
<build>
<sourceDirectory>src</sourceDirectory>
src
只指向带有sourceDirectory标记的src文件夹
早些时候
<build>
<sourceDirectory>.</sourceDirectory>
.
请注意,之前它是在IntellIJ中工作的,但不是在cmd上。
现在它对这两个问题都有效。这里的所有答案都没有帮助。这可能是正确的答案: 另一位StackOverflow用户写道: 我发现JetBrains团队成员的评论指出: IDEA自动排除构建“目标”文件夹,前提是 它下面没有生成的源,否则它将排除所有源 子文件夹,但已生成子文件夹 在
生成的源
文件夹中按标准进行Avro。maven不会忽略该文件夹,其中生成的类将被视为重复。
默认情况下,Maven只会重新打开目标
文件夹
要修复此问题,请在pom.xml
中添加此行:
<sourceDirectory>${project.basedir}/src/main/target/resources/avro</sourceDirectory>
${project.basedir}/src/main/target/resources/avro
背景:
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>${avro.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
<goal>protocol</goal>
<goal>idl-protocol</goal>
</goals>
<configuration>
<sourceDirectory>${project.basedir}/src/main/target/resources/avro</sourceDirectory>
<stringType>String</stringType>
<createSetters>false</createSetters>
<outputDirectory>${project.basedir}/target/</outputDirectory><enableDecimalLogicalType>true</enableDecimalLogicalType>
<fieldVisibility>private</fieldVisibility>
</configuration>
</execution>
</executions>
org.apache.avro
avro-maven插件
${avro.version}
生成源
模式
协议
idl协议
${project.basedir}/src/main/target/resources/avro
一串
假的
${project.basedir}/target/true
私有的
这将把
生成的资源
文件夹放在目标
文件夹下。我用一个maven插件生成它们。它们最初没有添加到版本控制中,只是检查了一下,所以我想这不是问题。这个anwser非常非常有用。谢谢你,先生。仔细检查您的本地配置更改是否未在主文件夹中生成类。然后就不会(也可能不会)被放到版本控制中,因为从来没有人想提交不工作的代码。这就是我的问题!谢谢这是我的问题。如果能提供解决方案,答案会更好。@v请列出重复的类名好吗?它们是javax.*类的副本吗?我有一个类似的问题,我需要消化wsdl web服务和模式xsd。两者都没有我所需要的,但在重叠部分有DUP,它们会在编译时抛出复制类错误。Hibernate的JPA静态元模型生成器文档声明,如果您想要控制处理器的执行,您可以将上面提供的解决方案与maven处理器插件结合使用,这没有帮助,我的JAR归档文件仍然包含重复的类文件。删除的行位于GenerateSynct下面这对我来说很有用(Maven、GWT、requestfactory构建)
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>${avro.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
<goal>protocol</goal>
<goal>idl-protocol</goal>
</goals>
<configuration>
<sourceDirectory>${project.basedir}/src/main/target/resources/avro</sourceDirectory>
<stringType>String</stringType>
<createSetters>false</createSetters>
<outputDirectory>${project.basedir}/target/</outputDirectory><enableDecimalLogicalType>true</enableDecimalLogicalType>
<fieldVisibility>private</fieldVisibility>
</configuration>
</execution>
</executions>