J'essaie de construire un plugin Hudson que j'ai modifié et qui nécessite jdk1.6. C'est bien, mais je ne vois pas comment je peux dire à Maven où se trouve le jdk différent. J'ai trouvé peu de mentions sur Internet, mais elles ne semblent pas s'appliquer à moi. Certains suggèrent d'ajouter une configuration à .m2/settings.xml
mais je n'ai pas de settings.xml
. De plus, je ne veux pas utiliser 1.6 pour toutes les versions de Maven.
Un problème, c’est que j’utilise mvn
dans cygwin, si cela compte vraiment. Il semble que je devrais pouvoir faire la spécification dans le fichier pom du projet, mais le pom existant est plutôt dépouillé.
En fin de compte, y a-t-il un moyen de spécifier un jdk pour un seul appel de maven?
En fin de compte, y a-t-il un moyen de spécifier un jdk pour un seul appel de maven?
Modifiez temporairement votre Java_HOME
.
Semble que maven donne maintenant une solution ici: Compilation de sources en utilisant un JDK différent
Disons que votre Java_HOME
pointe sur JDK7 (qui exécutera les processus maven)
Votre pom.xml
pourrait être:
<build>
<plugins>
<!-- we want JDK 1.6 source and binary compatiblility -->
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<!-- ... -->
<!-- we want sources to be processed by a specific 1.6 javac -->
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<executable>${Java_1_6_HOME}/bin/javac</executable>
<compilerVersion>1.3</compilerVersion>
</configuration>
</plugin>
</plugins>
</build>
Si vos développeurs ajoutent (et personnalisent) les lignes suivantes dans leur settings.xml
, votre pom sera indépendant de la plate-forme:
<settings>
[...]
<profiles>
[...]
<profile>
<id>compiler</id>
<properties>
<Java_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</Java_1_4_HOME>
<Java_1_6_HOME>C:\Program Files\Java\j2sdk1.6.0_18</Java_1_6_HOME>
</properties>
</profile>
</profiles>
[...]
<activeProfiles>
<activeProfile>compiler</activeProfile>
</activeProfiles>
</settings>
compile: compile possède ne propriété utilisateur qui vous permet de spécifier un chemin d'accès à la javac
.
Notez que cette propriété utilisateur ne fonctionne que lorsque fork
est true
, ce qui correspond à false
par défaut.
$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile
Vous devrez peut-être doubler la valeur si elle contient des espaces.
> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:\...\javac" compile
Voir aussi préséance des propriétés personnalisées Maven .
Comme vous l'avez dit "De plus, je ne veux pas utiliser la version 1.6 pour toutes les versions de Maven.".
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.9</source>
<target>1.9</target>
</configuration>
</plugin>
</plugins>
</build>
Cela garantira que votre projet utilise cette version de jdk.
Je dis que vous configurez Java_HOME comme le dit Pascal: Dans cygwin, si vous utilisez bash comme shell devrait être "export Java_HOME =/cygdrive/c/pathtothejdk" Et il n’est jamais nuisible d’exporter également le Java bin dir le PATH avec "export PATH = $ {Java_HOME}/bin: $ {PATH}"
et ajoutez également maven-enforce-plugin pour vous assurer que le bon jdk est utilisé. C'est une bonne pratique pour votre pom.
<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.6</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
http://maven.Apache.org/plugins/maven-enforcer-plugin/usage.html
Je sais que c'est un vieux fil. Mais je rencontrais des problèmes avec quelque chose de similaire à cela dans Maven pour Java 8 source du compilateur. J'ai compris cela avec une solution rapide mentionnée dans cet article pensais pouvoir le mettre ici et peut-être aider les autres:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Maven utilise la variable $ JAVACMD en tant que commande finale Java, définissez-la sur l'emplacement où l'exécutable Java basculera maven vers un JDK différent.
Hudson vous permet également de définir plusieurs runtimes Java et de vous permettre d'appeler Maven avec l'un d'eux. Regardez de plus près sur la page de configuration.
Pour Java 9:
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>9</source>
<target>9</target>
</configuration>
</plugin>
</plugins>
</build>
J'ai eu un problème de construction avec maven dans Eclipse sous Windows 7.
Bien que j'ai observé mvn build fonctionnait parfaitement depuis la ligne de commande.
mvn -T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ..\..\infra-scripts\maven-conf\settings.xml > output.log
Eclipse considérait comme machine JVM par défaut une installation JRE au lieu de JDK, donc elle échouait lors de la compilation.
J'ai ajouté à Eclipse.ini la ligne suivante:
-vm
C:\Program Files (x86)\Java\jdk1.8.0_25\bin
Aussi, lors du démarrage d’Eclipse, j’utilisais la liste suivante de la section "Objectifs":
-T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ..\..\infra-scripts\maven-conf\settings.xml
L'erreur de compilation a été résolue.