web-dev-qa-db-fra.com

Maven compiler avec plusieurs répertoires src

Existe-t-il un moyen de compiler plusieurs Java répertoires sources Java $) dans un seul projet maven?

180
sal

Vous pouvez ajouter un nouveau répertoire source avec build-helper:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/main/generated</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
265
evokk

Je le fais naïvement de cette façon:

<build>
  <finalName>osmwse</finalName>
  <sourceDirectory>src/main/Java, src/interfaces, src/services</sourceDirectory>
</build>
48
comeGetSome

Cela a fonctionné pour moi

<build>
    <sourceDirectory>.</sourceDirectory>
    <plugins>
        <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
        <includes>
            <include>src/main/Java/**/*.Java</include>
            <include>src/main2/Java/**/*.Java</include>
        </includes>
        </configuration>
        </plugin>
    </plugins>
</build>
36
sal

pour que cela fonctionne dans intelliJ, vous pouvez aussi ajouter

<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>

maven-compiler-plugin

15
domi.vds

Cela fonctionne également avec maven en définissant la balise resources. Vous pouvez nommer vos noms de dossier src comme bon vous semble.

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

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

        <resource>
            <directory>src/main/generated</directory>
            <includes>
                <include>**/*.Java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
10
sendon1982

Utilisé le build-helper-maven-plugin depuis le post - et mettez à jour src/main/généré. Et mvn clean compile fonctionne sur mon ../common/src/main/Java, ou sur le ../common, donc conservé ce dernier. Alors oui, en confirmant que le niveau de compilation d'IntelliJ IDEA (ver 10.5.2) a échoué comme l'a mentionné David Phillips. Le problème était que IDEA n'a pas ajouté d'autre Le problème a été résolu manuellement par l’ajout de la racine du projet. L’ajout manuel a résolu le problème. Ce n’est pas Nice, tout montage dans le projet doit provenir de maven et non de la modification directe des options de projet d’IDEA. helper-maven-plugin directement de sorte qu'il ajoute automatiquement les sources.

Il nous fallait ensuite une autre solution de contournement pour que cela fonctionne. Depuis chaque fois IDEA réimporté les paramètres maven après un changement de pom me, la source nouvellement ajoutée a été conservée sur le module, mais elle a perdu ses sélections de dossiers source et était inutilisable. Donc pour IDEA - besoin de les définir une fois:

  • Sélectionnez - Paramètres du projet/Maven/Importation/Conserver les dossiers source et de test lors de la réimportation.
  • Ajouter - Structure du projet/Paramètres du projet/Modules/{Module}/Sources/Ajouter une racine de contenu.

Conserver ces dossiers à l'importation n'est pas non plus la meilleure pratique au monde, ..., mais l'essayer.

2
arntg

Cela peut être fait en deux étapes:

  • Pour chaque répertoire source, vous devez créer votre propre module.
  • Dans tous les modules, vous devez spécifier le même répertoire de construction: ${build.directory}

Si vous travaillez avec Jetty (jetty:run), puis la recompilation de n'importe quelle classe dans n'importe quel module (avec Maven, IDEA ou Eclipse) entraînera le redémarrage de Jetty. Le même comportement que vous obtiendrez pour les ressources modifiées.

1
ursa

Dans la configuration, vous pouvez utiliser <compileSourceRoots>.

oal:          org.Apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-cli)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <basedir default-value="${basedir}"/>
  <buildDirectory default-value="${project.build.directory}"/>
  <compilePath default-value="${project.compileClasspathElements}"/>
  <compileSourceRoots default-value="${project.compileSourceRoots}"/>
  <compilerId default-value="javac">${maven.compiler.compilerId}</compilerId>
  <compilerReuseStrategy default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
  <compilerVersion>${maven.compiler.compilerVersion}</compilerVersion>
  <debug default-value="true">${maven.compiler.debug}</debug>
  <debuglevel>${maven.compiler.debuglevel}</debuglevel>
  <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding>
  <executable>${maven.compiler.executable}</executable>
  <failOnError default-value="true">${maven.compiler.failOnError}</failOnError>
  <failOnWarning default-value="false">${maven.compiler.failOnWarning}</failOnWarning>
  <forceJavacCompilerUse default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
  <fork default-value="false">${maven.compiler.fork}</fork>
  <generatedSourcesDirectory default-value="${project.build.directory}/generated-sources/annotations"/>
  <maxmem>${maven.compiler.maxmem}</maxmem>
  <meminitial>${maven.compiler.meminitial}</meminitial>
  <mojoExecution default-value="${mojoExecution}"/>
  <optimize default-value="false">${maven.compiler.optimize}</optimize>
  <outputDirectory default-value="${project.build.outputDirectory}"/>
  <parameters default-value="false">${maven.compiler.parameters}</parameters>
  <project default-value="${project}"/>
  <projectArtifact default-value="${project.artifact}"/>
  <release>${maven.compiler.release}</release>
  <session default-value="${session}"/>
  <showDeprecation default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
  <showWarnings default-value="false">${maven.compiler.showWarnings}</showWarnings>
  <skipMain>${maven.main.skip}</skipMain>
  <skipMultiThreadWarning default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
  <source default-value="1.6">${maven.compiler.source}</source>
  <staleMillis default-value="0">${lastModGranularityMs}</staleMillis>
  <target default-value="1.6">${maven.compiler.target}</target>
  <useIncrementalCompilation default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
  <verbose default-value="false">${maven.compiler.verbose}</verbose>
</configuration>

ce sont toutes les configurations disponibles pour la version 3.8.1 du plugin compilateur. Différentes versions ont différentes configurations que vous pouvez trouver en exécutant votre code avec -X après la commande générale mvn. Comme

mvn clean install -X
mvn compiler:compile -X

et recherche avec id ou nom d'objectif ou de plugin Cela peut aussi aider avec d'autres plugins. Eclipse, intelliJ peut ne pas afficher toutes les configurations en tant que suggestions.

0
Prabhu