2009-05-19 5 views
13

W moim projekcie maven2 mam katalog ${basedir}/autogen zawierający niektóre automatycznie wygenerowane pliki kodu źródłowego wyprodukowane przez wsdl2java.błąd kompilacji maven: zduplikowane klasy

Po uruchomieniu mvn compile pojawia się błąd kompilacji z powodu zduplikowanych klas, który występuje w ${basedir}/autogen. To prawda. Ale co robi faza kompilacji w ${basedir}/autogen? Nie powiedziałem maven, aby dodać ten katalog jako katalog źródłowy. I wydaje się, że nie ma sposobu, żeby kazać mavenowi zignorować katalog.

+0

@ vpalle możesz wymienić zduplikowane nazwy klas? czy są dupkami javax. * klas? – sal

+0

Mam podobny problem muszę przetrawić usługę WWW wsdl i schemat xsd. Nie ma wszystkiego, czego potrzebuję, ale w zakładce występują duplikaty, które następnie generują błędy klasy duplikatu podczas kompilacji. – Adam

Odpowiedz

0

Trudno zmienić domyślne zachowanie maven, myślę, że lepiej iść z nim - można generować te pliki z Maven wsdl2java-maven-plugin

+0

Generuję je za pomocą wtyczki maven. – vpalle

4

Widziałem to kilka razy. W prawie wszystkich przypadkach wynika to z tego, że generowane klasy są dodawane do głównego drzewa src, a następnie sprawdzane w kontroli wersji.

+1

Czy usunięcie ich spod kontroli wersji może rozwiązać problem? – vpalle

+0

Nie zostały one dodane do kontroli wersji, po prostu sprawdzono, więc domyślam się, że to nie jest problem. – vpalle

+0

Ten anwser jest bardzo, bardzo użyteczny. Dziękuję Panu. Sprawdź, czy zmiany konfiguracji lokalnej nie spowodowały utworzenia klas w folderze głównym. Wtedy nie zostanie (i prawdopodobnie nie będzie) wprowadzone do kontroli wersji, ponieważ nikt nigdy nie chce zatwierdzić nie działającego kodu. – kboom

1

Miałem podobny problem z generatorem modeli JPA. Miało to miejsce w tym zależność:

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

że niesłusznie dodano zakres = przewidzianym i następująco:

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

że ten sam problem przy korzystaniu z maven procesorem wtyczki i stwierdzono, że w roztworze było skonfigurować wtyczkę Maven-kompilatora następująco:

 <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 oznacza, że ​​kompilacja odbywa się bez przetwarzania adnotacji i dlatego nie ma duplikatów klas (które są typic sprzymierzeńcem wygenerowanym w fazie generowania źródeł)

Mam nadzieję, że to pomoże.

+2

Hibernate JPA Static Metamodel Generator dokumentacja stwierdza, że ​​można użyć rozwiązania przedstawionego powyżej w połączeniu z maven-procesor-wtyczką, jeśli chcesz kontrolować wykonanie procesora – dSebastien

+1

Świetna odpowiedź! Rozwiązałem moje problemy z [MapStruct] (http://mapstruct.org). –

+0

To nie pomogło, moje archiwum JAR nadal zawiera zduplikowane pliki klas. –

-2

rozwiązać ten sam problem

  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

nadzieję, że ta pomoc ..

1

ja go rozwiązać poprzez usunięcie generateAsync z mojego pom.xml wtyczki GWT będzie wyglądać

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

Usunięto linię poniżej generateAsync

+0

to zadziałało dla mnie (Maven, GWT, requestfactory build) –