2010-10-17 13 views
3

Je voudrais générer un fichier classpath à partir des dépendances pom.xml. J'ai besoin si au cours des essais que j'ai le classpath de toutes les dépendances (qui sont ensuite emballés dans un paquet)Générer un fichier classpath avec Maven

maven-dependency-plugin ne me convient pas pour deux raisons:

  • génère des chemins vers des fichiers dans le référentiel, donc pour utiliser d'autres modules, ils doivent d'abord exécuter install phase pour eux (je voudrais avoir des chemins comme /some/root/othermodule/target/classes)
  • il ne comprend pas le propre chemin de l'artefact (target/classes), ce qui signifie que je dois l'ajouter plus tard dans code, qui est maladroit

Je suis à la recherche d'un autre plug-in (ou comment exécuter correctement maven-dependency-plugin)

+0

Le chemin de classe pour le test est automatiquement généré. Alors, où est le problème particulier? Ou parlez-vous d'une sorte de test d'intégration au lieu d'un test unitaire? (Génération multimodule?) – khmarbaise

+0

Dans un composant, je crée un ClassLoader pour un autre. En production, le classpath est lib/*, mais en test, je ne veux pas passer par l'emballage – IttayD

Répondre

2

Je fini par utiliser GMaven:

 <plugin> 
      <groupId>org.codehaus.groovy.maven</groupId> 
      <artifactId>gmaven-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>execute</goal> 
        </goals> 
        <configuration> 
         <source> 
          def all = project.runtimeArtifacts.collect{ 
           def aid = "${it.groupId}:${it.artifactId}:${it.version}" 
           def p = project.projectReferences[aid] 
           p?.build?.outputDirectory ?: it.file.path 
          } + project.build.outputDirectory 
          def file = new File(project.build.directory, ".classpath") 
          file.write(all.join(File.pathSeparator)) 
         </source> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Le code est un peu complexe car je voulais chemins pour cibler/classes quand c'est possible. Si ce n'est pas nécessaire, on peut faire:

file.write(project.runtimeClasspathElements.join(File.pathSeparator))