2010-08-16 2 views
2

J'ai projet parent avec:Get modules Maven du référentiel au lieu de chemin de fichier relatif

<modules> 
    <module>../module1</module> 
    <module>../module2</module> 
    <module>../module3</module> 
</modules> 

et modules avec

<parent> 
    <groupId>com.cc</groupId> 
    <artifactId>parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 

Puis-je spécifier en quelque sorte, que s'il n'y a pas src à ../module2/charger ces modules à partir du référentiel échouer avec Caused by: java.io.FileNotFoundException: C:\work\temp\wid7\workspace\module2 (The system cannot find the file specified.)?

Répondre

3

Il est possible de résoudre le problème via des profils.

<profiles> 
    <profile> 
     <id>module1</id> 
     <activation> 
      <file> 
       <exists>../module1/pom.xml</exists> 
      </file> 
     </activation> 
     <modules> 
      <module>../module1</module> 
     </modules> 
    </profile> 

    <profile> 
     <id>module2</id> 
     <activation> 
      <file> 
       <exists>../module2/pom.xml</exists> 
      </file> 
     </activation> 
     <modules> 
      <module>../module2</module> 
     </modules> 
    </profile> 
    ... 
</profiles> 

Les modules de concaténation des blocs se bloquent à un. Donc, d'autres modules ont obtenu du dépôt.

+1

Où est l'utilisation du référentiel ici? –

3

Alors qu'ArcCC a fourni an acceptible workaround à votre problème, le problème principal ici est que vous ne comprenez pas le concept des modules.

Les modules sont des relations de temps de construction, pas des dépendances d'exécution (bien qu'elles n'aient généralement aucun sens à moins qu'elles ne soient également référencées en tant que dépendances). Un projet multi-module vous permet d'effectuer une construction complexe en une seule étape, en utilisant une configuration commune. Une fois que la construction a eu lieu, le bloc <modules> dans le pom déployé n'a aucune signification, donc il est absolument inutile de spécifier des modules si vous ne les avez pas.

Si votre problème est que vous voulez seulement construire une partie du projet, alors la solution consiste à utiliser les commandes avancées du réacteur. Voici un extrait de mvn --help:

usage: mvn [options] [<goal(s)>] [<phase(s)>] 

Options: 
-am,--also-make      If project list is specified, also 
             build projects required by the 
             list 
-amd,--also-make-dependents   If project list is specified, also 
             build projects that depend on 
             projects on the list 
-pl,--projects <arg>     Build specified reactor projects 
             instead of all projects 
-rf,--resume-from <arg>    Resume reactor from specified 

Exemples:

mvn -am -pl api,client/impl 

modules build api et client/impl (modules imbriqués fonctionnent ici aussi) avec toutes leurs dépendances (dans l'arborescence en cours)

mvn -amd -pl core 

construire le module de base et tous les modules qui le référencent comme une dépendance

mvn -rf my/deep/nested/module 

Reprendre une construction de réacteur à partir du module spécifié (scénario: vous avez une construction énorme qui échoue en raison d'un test unitaire dans le 25ème module. de sorte que vous fixer le test et continuer d'où vous êtes, d'économiser le temps de tous les modules précédents re-construction)


EDIT: Je viens de réaliser que vos modules sont en dehors du répertoire racine. à mon avis, c'est une violation du concept des modules maven, car il casse la fonctionnalité du réacteur spécifiée ci-dessus.

+0

La structure plate des modules n'interrompt pas la fonctionnalité du réacteur, http://maven.apache.org/plugins/maven-eclipse-plugin/reactor.html Section Flat Project Layout. Mais ce n'est pas supporté par le plugin Release. Je comprends l'idéologie des modules, mais quand vous avez une demi-centaine de modules, vous n'avez besoin de changer que quelques-uns, pas de logique pour tous les reconstruire, pas de logique pour les extraire du dépôt. Les options étendues à réacteur aident dans la moitié des problèmes, mais semblent que j'essaie de trouver la solution trop idéale = ( – ArchCC

Questions connexes