2017-06-19 1 views
0

Ich habe ein Manve-Projekt, und ich verwende das JAXB2-Plugin, um Java-Klasse aus XSD-Schema zu generieren. Standardmäßig werden die Klassen im Zielordner generiert, aber ich muss sie im Ordner src/main/java generieren.So ändern Sie das Standardverzeichnis für das Generieren von Java von XSD (JAXB)

Ich habe versucht, das Zeilenattribut generateDirectory hinzuzufügen. Die Klassen erzeugt werden, wo ich will, aber ich kann sie nicht an anderen Stellen importieren

Hier ist meine pom.xml:

 <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <version>0.13.1</version> 
      <configuration> 
       <schemaDirectory>src/main/resources/schemas</schemaDirectory> 
       <generateDirectory>src/main/java/com/evol/foo/generated-bar-sources</generateDirectory> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Und meine Java-Klasse unter Verwendung der generierten Dateien:

package com.evol.foo.service; 
import com.evol.foo.generated-bar-sources; //error: cannot resolve symbol generated 

@Component 
public class XMLParserService { 

    //ComplexType cannot be found 
    public ComplexType parseErrorFile(String filePath) throws JAXBException { 
    File file = new File(filePath); 
    JAXBContext jaxbContext = JAXBContext.newInstance(ComplexType.class); 

    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
    ComplexType errFile = (ComplexType) 
    jaxbUnmarshaller.unmarshal(file); 
    return errFile; 
    } 

Ich benutze Intellij Comunity und Java 8. Was mache ich falsch?

+1

In den generierten Java-Klassen die Paketdeklaration überprüfen. Ich vermute, es ist etwas Standard geblieben. Obwohl ich noch nie das jaxb maven-Plugin benutzt habe, aber wenn ich Klassen mit dem Kommandozeilen-Tool generierte, musste ich sowohl das Zielverzeichnis als auch den Zielpaketnamen angeben. –

+0

Versuchen Sie, das Plugin-Ziel vor der Kompilierungsphase explizit auszuführen. Z.B. 'maven clean org.jvnet.jaxb2.maven2: compile generieren '. Oder versuchen Sie, das Ziel des Plugins zu binden, um die Phase 'compile' zu ​​erstellen, indem Sie' < 'innerhalb des' ' Tags kompilieren. –

+0

Ich habe beide Antworten ausprobiert: das generatePackage zur Konfiguration hinzugefügt und das Plugin-Ziel separat ausgeführt, und es hat funktioniert! –

Antwort

2

ich glaube, das Paket sollte generatePackage außerhalb der generateDirectory Verwendung deklariert werden:

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.13.1</version> 
    <configuration> 
     <schemaDirectory>src/main/resources/schemas</schemaDirectory> 
     <generateDirectory>src/main/java</generateDirectory> 
     <generatePackage>com.evol.foo.generated-bar-sources</generatePackage> 
    </configuration> 
    <executions> 
     <execution> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin>