maven编译错误:重复的类

vpa*_*lle 16 maven-2 maven-plugin

在我的maven2项目中,我有一个目录${basedir}/autogen,其中包含一些自动生成的源代码文件wsdl2java.

运行时mvn compile我得到一个编译错误,因为存在重复的类${basedir}/autogen.这是真的.但编译阶段的作用是什么${basedir}/autogen?我没有告诉maven将此目录添加为源目录.似乎没有办法告诉maven忽略该目录.

小智 25

我在使用maven-processor-plugin时遇到了同样的问题,发现解决方案是按如下方式配置maven-compiler插件:

        <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>
Run Code Online (Sandbox Code Playgroud)

-proc:none表示编译在没有注释处理的情况下进行,因此没有重复的类(通常在generate-sources阶段生成)

我希望有所帮助.

  • Hibernate的JPA Static Metamodel Generator文档指出,如果要控制处理器的执行,可以将上面提供的解决方案与maven-processor-plugin结合使用 (2认同)
  • 这没有帮助,我的 JAR 存档仍然包含重复的类文件。 (2认同)

sal*_*sal 5

我已经看过几次了。在几乎所有情况下,这是由于生成的类被添加到主 src 树然后签入版本控制。

  • 如果它提供了解决方案,这个答案会更好。 (3认同)

小智 5

就我而言,它在我更改源目录时起作用。

新的 POM 看起来像,

<build>
        <sourceDirectory>src</sourceDirectory>
Run Code Online (Sandbox Code Playgroud)

仅指向带有 sourceDirectory 标记的 src 文件夹。

早些时候是

 <build>
    <sourceDirectory>.</sourceDirectory>
Run Code Online (Sandbox Code Playgroud)

请注意,早些时候它在 IntellIJ 中工作,但不在 cmd 上。现在它适用于两者。


IAd*_*ter 0

很难改变默认的 Maven 行为,我认为最好还是使用它 - 你可以使用 Maven wsdl2java-maven-plugin生成这些文件