2010-04-02 5 views
7

J'ai des projets qui doivent être construits avec une version spécifique du JDK.Dépendance du projet Maven par rapport à la version JDK

Le problème ne réside pas dans les paramètres source et cible, mais dans les fichiers jar de l'environnement d'exécution utilisés lors de la compilation. Dans certains cas, j'obtiens une erreur de compilation si j'essaie de compiler avec le mauvais JDK, mais parfois la compilation réussit et j'obtiens des erreurs d'exécution lors de l'utilisation des jars.

Par exemple dans Eclipse j'ai la possibilité d'établir l'environnement d'exécution pour le projet dans le fichier .classpath.

Existe-t-il un moyen de gérer une telle situation dans maven?

Ce que je voudrais avoir est la capacité de gérer la dépendance JRE comme les autres dépendances du projet dans le fichier POM.

MISE À JOUR:

La solution retenue a été le meilleur quand je pose cette question, donc je ne vais pas changer. En attendant une nouvelle solution à ce genre de problèmes a été introduite: Maven Toolchain. Suivez le lien pour plus de détails.

Répondre

2

J'ai trouvé cet article:

http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html

<project> 
    [...] 
    <build> 
    [...] 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.1</version> 
     <configuration> 
      <verbose>true</verbose> 
      <fork>true</fork> 
      <executable>${JAVA_1_4_HOME}/bin/javac</executable> 
      <compilerVersion>1.3</compilerVersion> 
     </configuration> 
     </plugin> 
    </plugins> 
    [...] 
    </build> 
    [...] 
</project> 
+0

Merci, cela résout mon problème –

1

Je crois que cela peut être résolu avec la suite plugin dans votre pom:

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

Ici vous ciblez la version 1.6, ou écrire votre propre version

+1

Non, comme je l'ai dit ce n'est pas une question de la source et le paramètre cible, car cette influence seulement comment le compilateur lire la langue (source) et générer le bytecode (target) mais pas les bibliothèques utilisées dans la compilation. Si vous compilez un projet 1.6 jdk avec 1.5 comme paramètre source/cible, vous pouvez toujours obtenir un jar qui n'est pas valide pour l'exécution avec 1.5 jre (par exemple, des classes surchargées peuvent poser problème). –

+0

@Andrea puis la solution Pascal est la réponse – ant

+0

oui, je pense que les profils sont ce dont vous avez besoin. –

2

J'ai des projets qui doivent être construire avec une version spécifique du JDK.

Vous pouvez utiliser le Maven Enforcer plugin pour imposer l'utilisation d'une version particulière du JDK:

<project> 
    [...] 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <requireJavaVersion> 
        <version>1.5</version> 
       </requireJavaVersion> 
       </rules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

Mais je ne suis pas sûr d'avoir bien compris la question. Si ce n'est pas ce que vous voulez, vous pourriez peut-être déclarer vos dépendances spécifiques au JDK dans les profils et utiliser un déclencheur d'activation basé sur la version du JDK. Par exemple:

<profiles> 
    <profile> 
    <activation> 
     <jdk>1.5</jdk> 
    </activation> 
    ... 
    </profile> 
</profiles> 

Cette configuration déclenchera le profil lorsque la version du JDK commence par "1.5".

+0

Merci le plugin enforcer est vraiment utile pour moi même si cela ne résout pas complètement mon problème. –

Questions connexes