Come aggiungere una directory di origine extra per Maven da compilare e includere nel vaso di compilazione?


95

Oltre a src / main / java, sto aggiungendo una directory src / bootstrap che voglio includere nel mio processo di compilazione, in altre parole, voglio che Maven compili e includa i sorgenti presenti nella mia build. Come!?


Domanda semplice: perché non spostare il codice sorgente in src / main / java? Oppure crea un progetto / modulo Maven separato che contenga il codice e definiscilo come dipendenza.
khmarbaise

7
Nel mio caso ho bisogno di aggiungere una cartella delle sorgenti generate, che preferisco risiedere all'interno di target.
djjeck

In alternativa, si potrebbe voler inserire i test di integrazione in directory diverse da src/{main,test}/quelle
descritte

Questo è stato anche discusso qui: stackoverflow.com/q/270445/1061929
bjmi

Risposte:


144

Puoi usare il Build Helper Plugin , ad esempio:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>some directory</source>
                ...
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

1
Eclipse riconosce davvero una cartella del genere come una delle buildpaths per chiunque? Perché non fa per me. FWIW, utilizzo m2eper importare il progetto.
mystarrocks

Ottima risposta, giusto per chiarire, dovresti sostituire il tuo plug-in-compilatore-maven con le righe dall'alto ...
Colin

Funziona anche in IntelliJ.
Alexander Klimetschek

1
Eclipse mi ha chiesto di installare un plugin per m2e, il connettore dell'helper di build. L'ho fatto e l'errore del ciclo di vita è sparito.
Alexis Dufrenoy

1
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.7:add-source (execution: add-source, phase: generate-sources)ottenere questo errore
Katie

35
NOTA: questa soluzione sposterà semplicemente i file di origine java nella directory target / classes e non compilerà i sorgenti.

Aggiorna pom.xmlcome -

<project>   
 ....
    <build>
      <resources>
        <resource>
          <directory>src/main/config</directory>
        </resource>
      </resources>
     ...
    </build>
...
</project>

2
NetBeans lo ha raccolto come un incantesimo :)
Attila

1
Sembra che sia necessario rimuovere l'esclusione ** per la cartella aggiunta nel percorso di creazione di Eclipse :(
Dormouse

@Dormouse puoi spiegare per favore?
Saikat

1
Non funziona con IntelliJ, vedrà <resource>come cartella "Resource" ma non come cartella "Source", ad es. Non compilerà i file sorgenti Java al loro interno.
Alexander Klimetschek

4
Questa soluzione sposterà semplicemente i file sorgente java nella directory target / classes e non compilerà i sorgenti
Stefan Haberl

12

7
Questo sovrascrive la directory src / main / java predefinita. Se vuoi più directory, devi specificare anche quella predefinita.
Natix

2
La domanda è come aggiungere più directory di origine e stai proponendo un metodo per aggiungere solo una directory di origine, che è l'opposto di quanto richiesto.
João Matos

1

Con le recenti versioni di Maven (3) e la versione recente del plug-in del compilatore maven (3.7.0), noto che l'aggiunta di una cartella sorgente con build-helper-maven-pluginnon è necessaria se la cartella che contiene il codice sorgente da aggiungere nella build si trova nella targetcartella o una sua sottocartella.
Sembra che il plugin del compilatore maven compili qualsiasi codice sorgente java che si trova all'interno di questa cartella qualunque sia la directory che li contiene.
Ad esempio avendo alcuni (generati o no) in codice sorgente target/a, target/generated-source/fooverranno compilati e aggiunti nella OutputDirectory: target/classes.


-1

Puoi aggiungere le directory per il tuo processo di compilazione come:

    ...
   <resources>
     <resource>
       <directory>src/bootstrap</directory>
     </resource>
   </resources>
   ...

Src / main / java è il percorso predefinito che non è necessario menzionare nel pom.xml


2
Perché le persone downvotes? Fondamentalmente la stessa risposta di saiky0 (che ha voti positivi) ma prima?
Friso

15
@Friso perché non è corretto. L'aggiunta di una directory di risorse aggiungerà risorse (file copiati target/classesma non compilati). Questa domanda è di aggiungere una directory di origine, che contiene i file che saranno compilati in target/classes, non copiato.
Darth Android
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.