Ошибка компиляции 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
- снова скомпилировать
Надеюсь, что эта помощь...