2012-01-04 10 views
14

Sto lavorando a un motore di blog molto semplice in Java per apprendere più tecnologie.Come includere correttamente i sorgenti Java in Maven?

Tech: Spring IoC, Hibernate, jUnit, GWT e Maven.

ho creato due progetti Maven: un progetto di base e un progetto GWT (che ha un riferimento sul core uno)

Codice è accessibile a https://github.com/LaurentT/BlogEngineCore

Il mio obiettivo è la seguente: voglio includere Origini Java e XML dal momento che il mio progetto GWT avrà bisogno dei sorgenti Java per compilarlo in JavaScript.

ho cercato di utilizzare il seguente codice nell'elemento <build>:

 <resources> 
     <resource> 
      <directory>src/main/java</directory> 
      <includes> 
       <include>**/*.java</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <includes> 
       <include>**/*.*xml</include> 
       <include>**/*.*properties</include> 
      </includes> 
     </resource> 
    </resources> 

miei test JUnit utilizzati a passare e finire prima che aggiungono, ma ora non sono nemmeno finendo sono appesi ...

Non ho idea di cosa sta succedendo, quindi voglio sapere se ci sono altri modi per includere i sorgenti Java o se sto sbagliando.

Qualsiasi indizio?

+0

perché pensi "test JUnit sono appesi" ha qualcosa a che fare con comprese le fonti java ? – milan

+0

È solo che se rimuovo quelle linee i miei test stanno finendo e passando. Non so perché, ma è quello che sta facendo :( –

risposta

11

provare a includere $ {basedir} davanti al percorso della directory.

<resource> 
    <directory>${basedir}/src/main/java</directory> 
</resource> 
+0

La soluzione di Sean era buona se volevo avere due JAR separati ma qui dal momento che il mio progetto GWT sta caricando un jar (il progetto principale) ho davvero bisogno di un JAR da caricare nel classpath in cui posso trovare le mie fonti.Questo ha funzionato come un incantesimo! grazie mille Mike –

+0

Questo includerà tutti i file nella tua directory di origine. Probabilmente vuoi includere solo '* .gwt.xml' e fonti da' client 'e' shared' dirs. –

3

È possibile trovare il modo di messa a punto per il progetto Maven multimodulo here.

Dov'è il file * gwt.xml?

Se il tag mostrato è parte del fascicolo del progetto nucleopom.xml, allora si dovrebbe anche aggiungere <include>**/*.gwt.xml</include>:

<resource> 
     <directory>src/main/java</directory> 
     <includes> 
      <include>**/*.java</include> 
      <include>**/*.gwt.xml</include> 
     </includes> 
</resource> 
+0

Questo ha funzionato per me, tuttavia fai attenzione, questo farà sì che tutto in src/main/resources NON sia incluso nel jar, risolvilo semplicemente copiando questo e aggiungendo altre risorse per src/main/risorse, incluse le estensioni/caratteri jolly appropriati –

+0

Questo esempio include solo i file richiesti per il modulo gwt, che è meglio che includere ciecamente tutto nella directory src. Grazie! –

+0

@ClickUpvote sei a destra, l'esempio è stato modificato per renderlo più portabile. È ora di entrare. –

21

Il modo più pulito Maven potrebbe essere quella di collegare un vaso sorgente separata.

ci sono modi standard per generare nella vostra costruzione using the maven source plugin:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-source-plugin</artifactId> 
    <version>2.2.1</version> 
    <executions> 
    <execution> 
     <id>attach-sources</id> 
     <phase>verify</phase> 
     <goals> 
     <goal>jar-no-fork</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

E il progetto GWT ora possono fare riferimento le vostre fonti di progetto di base in aggiunta al vostro vaso progetto principale:

<dependency> 
    <groupId>your.project</groupId> 
    <artifactId>core</artifactId> 
    <version>the.same.version</version> 
    <classifier>sources</classifier> 
    <scope>provided</scope><!-- use for compilation only --> 
</dependency> 
+0

Grazie mille! Un modo per farlo solo in un barattolo? O non è un problema? –

+0

@LaurentT guarda le altre risposte per quello. Ma come ho detto, è meno maven-like –

+1

Questa risposta include i file '* .gwt.xml'? –

0

In a differenza delle altre risposte, il mio approccio copia tutti i descrittori del modulo *.gwt.xml e solo i file di origine Java che sono effettivamente specificati nei descrittori del modulo. Inoltre, non è necessario ripetersi nei descrittori di moduli e POM.

Aggiornare il vostro pom con:

<plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>gwt-maven-plugin</artifactId> 
      <version>2.7.0</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>resources</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

e il vostro * .gwt.xml

<?xml version="1.0" encoding="UTF-8"?> 
<module> 

    <!-- Specify the paths for translatable code --> 
    <source path='shared' /> 

</module> 

org: Codehaus.Mojo: GWT-Maven-plugin docs

GWT: risorse
Descrizione: Copia GWT codice sorgente Java e descrittore di modulo come risorse nel OutputDirectory build. Alternativa alla dichiarazione di <resource> nel POM con filtro più fine mentre il descrittore del modulo viene letto per rilevare le origini da copiare.
Implementazione: org.codehaus.mojo.gwt.GwtResourcesMojo
Lingua: java
Bound alla fase: processo-risorse

Problemi correlati