maven compilation error: duplicate classes

假装没事ソ 提交于 2019-11-27 03:13:18

问题


In my maven2 project I have a directory ${basedir}/autogen that contains some autogenerated source code files produced by wsdl2java.

When running mvn compile I get an compilation error, because of duplicate classes, that lives in ${basedir}/autogen. This is true. But what is the compilation phase doing in ${basedir}/autogen? I have not told maven to add this directory as a source directory. And there seems to be no way of telling maven to ignore the directory.


回答1:


I had the same problem when using the maven-processor-plugin and found that the solution was to configure the maven-compiler plugin as follows:

        <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>

-proc:none means that compilation takes place without annotation processing and therefore no duplicate classes (which are typically generated in the generate-sources phase)

I hope that helps.




回答2:


I've seen this a few times. In almost all cases, it is due to the generated classes being added to the main src tree then checked into version control.




回答3:


In my case, it worked when I changed source directory.

New POM looks like,

<build>
        <sourceDirectory>src</sourceDirectory>

Pointing just a src folder with sourceDirectory tag.

Earlier it was

 <build>
    <sourceDirectory>.</sourceDirectory>

Note that earlier it was working in IntellIJ, but not on cmd. Now it works on both.




回答4:


I had a similar problem with JPA model generator. It occurred on this dependency:

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa.modelgen</artifactId>
    <version>2.1.1</version>
</dependency>

I wrongly added the scope=provided and that resulted in:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.1:compile (default-compile) on project mocker: Compilation failure: Compilation failure:
[ERROR] \Projects\entity\MockVehicle_.java:[10,7] duplicate class: entity.MockVehicle_



回答5:


I resolve it by remove generateAsync from my pom.xml the the GWT plugin will look like

                <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>



回答6:


I had the exact same issue. In my case the problem was that I called maven with -f=./pom.xml. I have no idea why this leads to a different result (would be nice if someone can explain) but maybe good to know if someone else has the same issue.




回答7:


Its hard to change default maven behaviour, i think its better to go with it - you could generate those files with maven wsdl2java-maven-plugin




回答8:


I my case helped this:

<!-- 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>



回答9:


I resolve the same issue

  1. cleaning maven project :-mvn clean
  2. delete com folder from src then compile
  3. copy com from generated to src->main-->java
  4. again compile

Hope this Help..



来源:https://stackoverflow.com/questions/882295/maven-compilation-error-duplicate-classes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!