maven-2 settings java pom.xml

maven 2 - Especifique JDK para que Maven lo use



maven-2 settings (10)

Entonces, la conclusión es, ¿hay alguna manera de especificar un jdk para una sola invocación de maven?

Cambie temporalmente su JAVA_HOME .

Estoy intentando construir un complemento de Hudson que he modificado y requiere jdk1.6. Esto está bien, pero no veo cómo puedo decirle a maven dónde está el jdk. He encontrado pocas menciones en Internet, pero parece que no se aplican a mí. Algunos sugieren agregar algunas configuraciones a .m2/settings.xml pero no tengo un settings.xml . Además, no quiero usar 1.6 para todas las compilaciones maven.

Un inconveniente es que estoy usando mvn en cygwin, si eso es importante. Parece que debería poder hacer la especificación en el archivo pom del proyecto, pero el pom existente es bastante simple.

Entonces, la conclusión es, ¿hay alguna manera de especificar un jdk para una sola invocación de maven?


Como dijiste "Además, no quiero usar 1.6 para todas las compilaciones de maven". Así que mejor voy a decir que modifiques tu archivo pom y especifiques qué versión de jdk usar.

<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>

Garantizará que su proyecto en particular use esa versión de jdk.


Hudson también le permite definir varios tiempos de ejecución de Java y le permite invocar a Maven con uno de estos. Eche un vistazo más de cerca en la página de configuración.


Maven usa la variable $ JAVACMD como el último comando de java, configúralo en el lugar donde el ejecutable de Java cambiará maven a diferentes JDK.


Para 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>


Parece que maven ahora da una solución aquí: compilar fuentes usando un JDK diferente

Digamos que su JAVA_HOME apunta a JDK7 (que ejecutará procesos de maven)

Tu pom.xml podría ser:

<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 sus desarrolladores solo agregan (y personalizan) las siguientes líneas en su settings.xml , su pom será independiente de la plataforma:

<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>


Sé que es un hilo viejo. Pero tenía algunos problemas con algo similar a esto en la fuente de compilación de Maven para Java 8. Me di cuenta de que con una solución rápida mencionada en este artículo pensé que puedo ponerlo aquí y quizás pueda ayudar a otros:

<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>


Te digo que configures JAVA_HOME como dice Pascal: en cygwin si usas bash ya que tu shell debería ser "exportar JAVA_HOME = / cygdrive / c / pathtothejdk" Y nunca daña exportar también el directorio java bin a la RUTA con "export PATH" = $ {JAVA_HOME} / bin: $ {PATH} "

y también agrega maven-enforce-plugin para asegurarte de que se usa el jdk correcto. Esta es una buena práctica para tu 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


Tuve un problema de compilación con maven dentro de Eclipse en Windows 7.

Aunque observé que mvn build funcionaba perfectamente desde la línea de comandos.

mvn -T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ../../infra-scripts/maven-conf/settings.xml > output.log

Eclipse estaba considerando como JVM predeterminada una instalación de JRE en lugar de JDK, por lo que estaba fallando en la compilación.

Agregué a eclipse.ini siguiente línea:

-vm C:/Program Files (x86)/Java/jdk1.8.0_25/bin

También cuando comencé desde eclipse utilicé en la sección siguiente de la sección "Metas":

-T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ../../infra-scripts/maven-conf/settings.xml

El error de compilación se resolvió.


compile:compile tiene una propiedad de usuario que le permite especificar una ruta al javac .

Tenga en cuenta que esta propiedad del usuario solo funciona cuando fork es true que es false de manera predeterminada.

$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile

Es posible que deba duplicar el valor si contiene espacios.

> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:/.../javac" compile

Consulte también Precedencia de propiedades personalizadas de Maven .