ошибка компиляции maven: повторяющиеся классы

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

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


person vpalle    schedule 19.05.2009    source источник
comment
@vpalle, можете ли вы перечислить повторяющиеся имена классов? они обманывают классы javax. *?   -  person sal    schedule 26.05.2009
comment
У меня аналогичная проблема, мне нужно переварить веб-службу wsdl и схему xsd. Ни то, ни другое мне не нужно, но в перекрытии есть дубликаты, которые затем вызывают ошибки дублирующего класса при компиляции.   -  person Adam    schedule 23.06.2010


Ответы (10)


У меня была такая же проблема при использовании плагина 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 означает, что компиляция происходит без обработки аннотаций и, следовательно, без дублирующихся классов (которые обычно генерируются на этапе генерации источников)

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

person Nicholas Hemley    schedule 19.09.2011
comment
В документации Hibernate JPA Static Metamodel Generator указано, что вы можете использовать представленное выше решение в сочетании с плагином maven-processor-plugin, если хотите контролировать выполнение процессора. - person dSebastien; 08.07.2014
comment
Это не помогло, мой архив JAR все еще содержит повторяющиеся файлы классов. - person Tomáš Zato - Reinstate Monica; 18.04.2016

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

person sal    schedule 22.05.2009
comment
Во-первых, они не были добавлены в систему контроля версий, просто проверены, так что я думаю, что проблема не в этом. - person vpalle; 25.05.2009
comment
Этот ответ очень, очень полезен. Спасибо, сэр. Дважды проверьте, не привели ли ваши локальные изменения конфигурации к созданию классов в основной папке. Тогда не будет (и, вероятно, не будет) помещено в контроль версий, потому что никто никогда не хочет фиксировать неработающий код. - person kboom; 26.04.2014
comment
Это была моя проблема! Спасибо - person nterry; 02.02.2017
comment
Это действительно была моя проблема - person cen; 14.03.2017
comment
Эти ответы будут намного лучше, если они предоставят решение. - person Fran Marzoa; 01.03.2018

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

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

<build>
        <sourceDirectory>src</sourceDirectory>

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

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

 <build>
    <sourceDirectory>.</sourceDirectory>

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

person Roshan Birar    schedule 18.07.2019

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

person Robert Stoll    schedule 12.06.2018

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

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

Я неправильно добавил scope=provided, и это привело к:

[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_
person Alex Kamburov    schedule 19.11.2010

Я разрешаю это, удаляя 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>
person Ahmed Salem    schedule 24.05.2016
comment
Удаленная строка ниже ‹goal›generateAsync‹/goal› - person Ahmed Salem; 24.05.2016
comment
это сработало для меня (Maven, GWT, requestfactory build) - person Jim ReesPotter; 20.07.2017

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

person Community    schedule 19.05.2009
comment
Я генерирую их с помощью плагина maven. - person vpalle; 19.05.2009

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

<!-- 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>
person Community    schedule 03.05.2019

Все ответы здесь бесполезны. Это может быть правильный ответ:

Другой пользователь StackOverflow написал:

Я нашел комментарий члена команды JetBrains, в котором говорится, что:

IDEA автоматически исключает «целевую» папку сборки при условии, что в ней нет сгенерированных источников, в противном случае она исключает все подпапки, кроме сгенерированных.

Авро по стандарту в папке generated-sources. Эта папка не игнорируется maven, и сгенерированные там классы будут считаться дубликатами. По умолчанию Maven будет игнорировать только папку target.

Чтобы исправить, добавьте эту строку в pom.xml:

 <sourceDirectory>${project.basedir}/src/main/target/resources/avro</sourceDirectory>

Контекст:

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

Это поместит папку generated-resources в папку target.

person Philipp    schedule 27.03.2020

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

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

Надеюсь на эту помощь..

person nitin verma    schedule 01.04.2016