Maven 2 maven编译错误:重复的类

Maven 2 maven编译错误:重复的类,maven-2,maven-plugin,Maven 2,Maven Plugin,在我的maven2项目中,我有一个目录${basedir}/autogen,其中包含一些由wsdl2java生成的自动生成的源代码文件 当运行mvncile时,我得到了一个编译错误,因为存在于${basedir}/autogen中的重复类。这是真的。但是编译阶段在${basedir}/autogen中做什么呢?我没有告诉maven将此目录添加为源目录。 而且似乎没有办法告诉maven忽略该目录。很难更改默认的maven行为,我认为最好还是这样做——你可以用maven生成这些文件。我已经看过几次了

在我的maven2项目中,我有一个目录
${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意味着编译在没有注释处理的情况下进行,因此没有重复的类(通常在生成源代码阶段生成)


我希望这能有所帮助。

我解决了同样的问题

  • 清理maven项目:-
    mvn清理
  • 从src中删除com文件夹,然后编译
  • 将com从生成的复制到src->main-->java
  • 再编

  • 希望对您有所帮助。

    我通过从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>