2016-02-06 44 views
5

Próbuję wygenerować pliki Java z XSD, ale poniższy kod nie generuje. Jeśli odkomentuję outputDirectory, działa, ale najpierw usuń folder. dodanie clearOutputDir = false również nie generuje niczego.Wtyczka JAXB maven nie generująca klas

<build> 
     <plugins> 
      <!-- JAXB xjc plugin that invokes the xjc compiler to compile XML schema into Java classes.--> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>jaxb2-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>xjc</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <!-- The package in which the source files will be generated. --> 
        <packageName>uk.co.infogen.camel.message</packageName> 
        <!-- The schema directory or xsd files. --> 
        <sources> 
         <source>${basedir}/src/main/resources/xsd</source> 
        </sources> 
        <!-- The working directory to create the generated java source files. --> 
        <!--<outputDirectory>${basedir}/src/main/java</outputDirectory> 
        <clearOutputDir>false</clearOutputDir>--> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

Dostaję komunikat:

[INFO] --- jaxb2-maven-plugin:2.2:xjc (default) @ service-business --- 
[INFO] Ignored given or default xjbSources [/Users/aaa/development/workspace/infogen/infogen_example/service-business/src/main/xjb], since it is not an existent file or directory. 
[INFO] No changes detected in schema or binding files - skipping JAXB generation. 
+0

Nie powinieneś nigdy generować do folderu źródłowego, ale do celu/generowane-źródła/xjc – jah

+0

tak, dlatego skomentowałem outputDirectory, ale nie generuje ona źródła i podaje ten sam komunikat informacyjny. – krmanish007

Odpowiedz

6

Pierwszą rzeczą jest to, że powinien nigdy, wygenerować kod wewnątrz src/main/java. Wygenerowany kod nie powinien być kontrolowany przez wersję i może zostać usunięty w dowolnym momencie, ponieważ i tak zostanie zregenerowany.

Wygenerowany kod powinien zawsze znajdować się pod target, katalogiem budowy Mavena. jaxb2-maven-plugin wygeneruje domyślnie klasy pod numerem target/generated-sources/jaxb i nie ma powodu, aby to zmieniać. Jeśli używasz środowiska Eclipse, wystarczy dodać ten folder do ścieżki budowania, klikając go prawym przyciskiem myszy i wybierając opcję "Utwórz ścieżkę> Użyj folderu źródłowego".

Po uruchomieniu Mavena, uruchomisz go pod numerem mvn clean install: wyczyści on folder target i zregeneruje wszystko od nowa: dzięki temu uzyskasz bezpieczną i łatwą w utrzymaniu kompilację. Przekonasz się, że rozwiąże to Twój problem: ponieważ wygenerowane klasy są usuwane przed kompilacją, zostaną poprawnie wygenerowane ponownie podczas następnej kompilacji.

Oczywiście, jeśli ten proces generacji jest długa i nie chcesz zrobić to za każdym razem, można uruchomić Maven tylko z mvn install i skonfigurować wtyczkę do nie usuwania wcześniej wygenerowanych klas ustawiając clearOutputDir do false. Należy jednak pamiętać, że podczas gdy kompilacja będzie nieco szybsza, możesz nie wykryć kolejnych błędów w XSD, jeśli są one aktualizowane.

+0

Użyłem kompilacji mvn do wygenerowania, ale ten sam kod zadziałał po wypróbowaniu kompilacji mvn clean. – krmanish007

+0

@ krmanish007 Pamiętaj jednak o moim ostrzeżeniu: generowanie kodu wewnątrz 'src/main/java' doprowadzi tylko do bólu i cierpienia! :) – Tunaki

+0

to dlatego został skomentowany od samego początku. Dodałem tylko, aby zobaczyć, czy to pomaga w jego wygenerowaniu i skomentowałem to jeszcze raz. – krmanish007