2011-11-24 17 views
10

Inserisco un file jaxb.properties nel pacchetto in cui sono presenti le classi in cui utilizzo un provider JAXB diverso (come visualizzato in questo collegamento Specifying EclipseLink MOXy as Your JAXB Provider) che utilizzo per unmarshalling.file jaxb.properties dal pacchetto java non incluso in Maven .war

La verifica quanto segue:

  • Quando eseguo il progetto da Eclipse/STS la deserializzazione funziona bene, dal momento che legge il file jaxb.properties.

  • Quando si crea il progetto con Maven 3 (mvn clean install), il file jaxb.properties non è incluso nel pacchetto, pertanto tali classi non possono eseguire correttamente i file XML unmarshall. Quindi devo inserire manualmente il file jaxb.properties navigando nell'app distribuita, inserendo il pacchetto e incollando il file.

Soluzioni? Grazie!

risposta

10

È necessario inserire risorse (come jaxb.properties) in src/main/resources.
Non riesco ancora a trovare alcuna prova/documentazione, ma sono certo che Maven compilerà e copierà solo i file .java dalla cartella src.

Dalla documentazione sembra chiaro, che compila solo compila e non copia nulla. Quindi solo. I file java in src/main/java verranno gestiti e tutto il resto verrà ignorato.

Le risorse sono gestite da resources:resources, che viene eseguita automaticamente. Questo obiettivo copia le risorse da src/main/resources.

Compile compila solo i file dalla cartella src. I file di risorse non sono file java e pertanto non verranno copiati/compilati nella directory di output.

+0

Metterà alla prova se funzionerà in questo modo e fornire un feedback .. –

+0

ha funzionato? Come hai risolto questo problema? – HDave

+0

@HDave Credo che abbia inserito le proprietà in src/main/resources – oers

12

Come accennato, la soluzione migliore è utilizzare lo maven-resources-plugin per raggiungere questo obiettivo.

 <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.5</version> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${basedir}/target/classes/path/to/model/</outputDirectory> 
         <resources> 
          <resource> 
           <directory>${basedir}/src/main/resources/</directory> 
           <includes> 
            <include>jaxb.properties</include> 
           </includes> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Posizionare il file di jaxb.properties in directory e specificare la posizione del pacchetto (outputDirectory) e questo copierà la risorsa prima del confezionamento.

+0

Questo ha funzionato come un fascino. – webDeveloper

+0

nel mio caso la ' validazione' 'era errata, perché la cartella non esisteva in quella fase, suppongo. L'ho cambiato in ' process-resources' e ora funziona – kiedysktos

0

aggiungere al vostro pom.xml

<resources> 
     <resource> 
      <directory>src/main/java</directory> 
      <includes> 
       <include>**/jaxb.properties</include> 
      </includes> 
     </resource>   
    </resources> 
Problemi correlati