Comment ajouter un répertoire source supplémentaire pour que maven compile et inclue dans le fichier jar?


95

En plus du src / main / java, j'ajoute un répertoire src / bootstrap que je veux inclure dans mon processus de construction, en d'autres termes, je veux que maven compile et inclue les sources dans ma construction. Comment!?


Question simple: pourquoi ne pas déplacer le code source vers src / main / java? Ou créez un projet / module maven séparé contenant le code et définissez-le comme dépendance.
khmarbaise

7
Dans mon cas, je dois ajouter un dossier de sources généré, que je préfère résider dans la cible.
djjeck

Alternativement, on pourrait vouloir placer les tests d'intégration dans des répertoires autres que src/{main,test}/ceux
indiqués

Cela a également été discuté ici: stackoverflow.com/q/270445/1061929
bjmi le

Réponses:


144

Vous pouvez utiliser le plugin Build Helper , par exemple:

<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 reconnaît-il vraiment un tel dossier comme l'un des buildpaths pour quiconque? Parce que ce n'est pas pour moi. FWIW, j'utilise m2epour importer le projet.
mystarrocks

Excellente réponse, juste pour clarifier, vous devriez remplacer votre maven-compiler-plugin par les lignes d'en haut ...
Colin

Fonctionne également dans IntelliJ.
Alexander Klimetschek

1
Eclipse m'a demandé d'installer un plugin pour m2e, le connecteur d'aide à la construction. Je l'ai fait et l'erreur de cycle de vie a disparu.
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)obtenir cette erreur
Katie

35
REMARQUE: Cette solution déplacera simplement les fichiers source java vers le répertoire target / classes et ne compilera pas les sources.

Mettre à jour le pom.xmlas -

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

2
NetBeans l'a ramassé comme un charme :)
Attila

1
Il semble que vous deviez supprimer l'exclusion ** pour le dossier ajouté sur le chemin de construction d'Eclipse :(
Dormouse

@Dormouse pouvez-vous expliquer s'il vous plaît?
Saikat le

1
Ne fonctionne pas avec IntelliJ, il verra <resource>comme dossier "Resource" mais pas comme dossier "Source", par exemple il ne compilera pas les fichiers source Java à l'intérieur.
Alexander Klimetschek

4
Cette solution déplacera simplement les fichiers source java vers le répertoire target / classes et ne compilera pas les sources
Stefan Haberl

12

7
Cela remplace le répertoire par défaut src / main / java. Si vous voulez plusieurs répertoires, vous devez également spécifier celui par défaut.
Natix

2
La question est de savoir comment ajouter plusieurs répertoires sources et vous proposez une méthode pour ajouter un seul répertoire source, ce qui est le contraire de ce qui est demandé.
João Matos

1

Avec les versions récentes de Maven (3) et la version récente du plugin de compilateur maven (3.7.0), je remarque que l'ajout d'un dossier source avec le build-helper-maven-pluginn'est pas nécessaire si le dossier contenant le code source à ajouter dans la construction se trouve dans le targetdossier ou un sous-dossier de celui-ci.
Il semble que le plugin maven du compilateur compile tout code source java situé dans ce dossier quel que soit le répertoire qui les contient.
Par exemple avoir certains (généré ou non) le code source target/a, target/generated-source/fooseront compilés et ajoutés dans le outputDirectory: target/classes.


-1

Vous pouvez ajouter les répertoires pour votre processus de construction comme:

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

Le src / main / java est le chemin par défaut qu'il n'est pas nécessaire de mentionner dans le pom.xml


2
Pourquoi les votes négatifs? Fondamentalement, la même réponse que celle de saiky0 (qui a des votes positifs) mais plus tôt?
Friso

15
@Friso parce que ce n'est pas correct. L'ajout d'un répertoire de ressources ajoutera des ressources (fichiers copiés target/classesmais non compilés). Cette question concerne l' ajout d' un répertoire source, qui contient des fichiers qui seront compilés dans target/classes, non copiés.
Darth Android
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.