2016-04-26 24 views
1

Mein pom sieht aus wieJaxb2 regenerieren Klassen mit jedem mvn sauber Paket

<plugins> 
     <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <version>0.12.3</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <schemaLanguage>WSDL</schemaLanguage> 
       <generateDirectory>src/main/java</generateDirectory> 
       <schemaDirectory>src/main/resources/wsdl/</schemaDirectory> 
       <schemaIncludes> 
        <include>*.xsd</include> 
        <include>draw/*.xsd</include> 
       </schemaIncludes> 
      </configuration> 
     </plugin> 

    </plugins> 

Wenn ich eine mvn clean package tun es gemäß der Konfiguration aufgebaut ist. Jedoch, nachdem ich es einmal gebaut habe, will ich es nicht jedes Mal erstellen, wenn ich eine mvn clean package mache, außer die XSD wurde irgendwie modifiziert.

Wie erreiche ich das?

+0

Generieren in 'src/main/java' ist im Allgemeinen eine schlechte Idee ... – khmarbaise

+0

Sie haben Recht ... Ich habe dieses Dankeschön behoben – idipous

Antwort

1

Die in diesem Plugin für das Ziel <goal>generate</goal> deklarierte Standardphase ist generate-resources. In Bezug auf Maven Default Lifecycle können Phasen nicht übersprungen werden. Der Befehl mvn phase-x bedeutet immer "alle Phasen bis Phase-x laufen lassen".

Die Option, die Sie verwenden können, ist profile. So können Sie Ihr Projekt so profilieren, dass es mit oder ohne Generierung von Ressourcen erstellt wird.

Beispiel:

<profiles> 
    <profile> 
     <id>GEN-RESOURCES</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.jvnet.jaxb2.maven2</groupId> 
        <artifactId>maven-jaxb2-plugin</artifactId> 
        <version>0.12.3</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>generate</goal> 
          </goals> 
         </execution> 
        </executions> 
        <configuration> 
         <schemaLanguage>WSDL</schemaLanguage> 
         <generateDirectory>src/main/java</generateDirectory> 
         <schemaDirectory>src/main/resources/wsdl/</schemaDirectory> 
         <schemaIncludes> 
          <include>*.xsd</include> 
          <include>draw/*.xsd</include> 
         </schemaIncludes> 
        </configuration> 
       </plugin> 

      </plugins> 
     </build> 
    </profile> 
</profiles> 

das Profil verwenden -P

mvn clean package -PGEN-RESOURCES 

sonst kein Ding erzeugt werden aktivieren Maven Profil erklärt here

Ich hoffe, das hilft.

+0

Während dies funktionieren würde, ist dies nicht die richtige Richtung. Zuerst hat das 'maven-jaxb2-plugin' eine eingebaute Funktion, die nur dann neu generiert wird, wenn sich die Schemas geändert haben. Als Nächstes führen die Verwendung von Profilen zum Aktivieren und Deaktivieren von Build-Schritten zu schrecklichen Build-Dateien. Daher der Downvote, sorry. – lexicore

2

Haftungsausschluss: Ich bin der Autor der maven-jaxb2-plugin.

Zuerst generieren Sie nicht in src/main/java.

Als nächstes, wenn richtig konfiguriert ist, das Plugin nicht regenerieren es sei denn etwas ändert. Das Plugin sammelt "source" - und "target" -Dateien und erzeugt genau dann, wenn der Zeitstempel der "source" -Datei neuer ist als der der "target" -Dateien.

Weitere Informationen zur Funktionsweise finden Sie in der Dokumentation unter Up-to-Date Checks.

Dies setzt jedoch voraus, dass das Plugin Zeitstempel von "Quell" - und "Ziel" -Dateien sauber bestimmen kann. Dies ist einer der Gründe, warum Sie Ihren Code in target/generated-source/<dir> und nicht in src/main/java generieren sollten.

Als nächstes funktioniert das definitiv nicht mit mvn *clean* package als *clean* entfernt target und damit target/generated-source/<dir>. Führen Sie also einfach mvn package statt mvn clean package.

+0

Danke, ich habe von src/main/java geändert und in der Tat funktioniert es wie du beschrieben hast. Wenn ich nicht sauber benutze, baut es nicht. – idipous