Ошибка компиляции maven: дубликаты классов

В моем проекте maven2 у меня есть каталог ${basedir}/autogen, который содержит некоторые файлы с автогенерированным исходным кодом, созданные wsdl2java.

При запуске mvn compile я получаю ошибку компиляции из-за повторяющихся классов, которая находится в ${basedir}/autogen. Это правда. Но какова фаза компиляции в ${basedir}/autogen? Я не сказал maven, чтобы добавить этот каталог в качестве исходного каталога.  И, похоже, нет способа сообщить maven игнорировать каталог.

Ответ 1

У меня была такая же проблема при использовании модуля 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>

-proc: none означает, что компиляция выполняется без обработки аннотаций и, следовательно, нет повторяющихся классов (которые обычно генерируются в фазе генерируемых источников)

Я надеюсь, что это поможет.

Ответ 2

Я видел это несколько раз. Почти во всех случаях это связано с тем, что сгенерированные классы добавляются в основное дерево src, а затем проверяются на контроль версий.

Ответ 3

У меня была аналогичная проблема с генератором модели JPA. Это произошло от этой зависимости:

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

Я ошибочно добавил предоставленную область scope =, и это привело к:

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

Ответ 4

Я разрешаю его, удаляя generateAsync из моего pom.xml, плагин 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>

Ответ 5

У меня была точно такая же проблема. В моем случае проблема заключалась в том, что я позвонил maven с -f=./pom.xml. Я понятия не имею, почему это приводит к другому результату (было бы хорошо, если бы кто-то мог объяснить), но, возможно, было бы полезно узнать, если у кого-то еще есть такая же проблема.

Ответ 6

Сложно изменить поведение по умолчанию maven, я думаю, что лучше с ним работать - вы можете сгенерировать эти файлы с помощью maven wsdl2java-maven-plugin

Ответ 7

Мне мой случай помог в этом:

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

Ответ 8

В моем случае это сработало, когда я сменил исходный каталог.

Новый POM выглядит так,

<build>
        <sourceDirectory>src</sourceDirectory>

Указывает только папку src с тегом sourceDirectory.

Раньше это было

 <build>
    <sourceDirectory>.</sourceDirectory>

Обратите внимание, что раньше он работал в IntellIJ, но не на cmd. Теперь это работает на обоих.

Ответ 9

Я разрешаю ту же проблему

  • очистка проекта maven: - mvn clean
  • удалить папку com из src, затем скомпилировать
  • копировать com из сгенерированного в src- > main → java
  • снова скомпилировать

Надеюсь, что эта помощь...