Maven 2 指定Maven要使用的JDK
我正在尝试构建一个我修改过的Hudson插件,它需要jdk1.6。这很好,但我不知道如何告诉maven不同的jdk在哪里。我在网上发现很少有人提及,但他们似乎不适用于我。有些人建议在Maven 2 指定Maven要使用的JDK,maven-2,settings,java,pom.xml,Maven 2,Settings,Java,Pom.xml,我正在尝试构建一个我修改过的Hudson插件,它需要jdk1.6。这很好,但我不知道如何告诉maven不同的jdk在哪里。我在网上发现很少有人提及,但他们似乎不适用于我。有些人建议在.m2/settings.xml中添加一些配置,但我没有settings.xml。另外,我不想对所有maven构建都使用1.6 一个纠结是我在cygwin中使用了mvn,如果这很重要的话。看起来我应该能够在项目pom文件中制定规范,但是现有的pom非常简单 所以底线是,有没有一种方法可以为maven的一次调用指定一个
.m2/settings.xml
中添加一些配置,但我没有settings.xml
。另外,我不想对所有maven构建都使用1.6
一个纠结是我在cygwin中使用了mvn
,如果这很重要的话。看起来我应该能够在项目pom文件中制定规范,但是现有的pom非常简单
所以底线是,有没有一种方法可以为maven的一次调用指定一个jdk
所以底线是,有没有一种方法可以为maven的一次调用指定一个jdk
暂时更改
JAVA\u HOME
环境变量的值。Hudson还允许您定义多个JAVA运行时,并允许您使用其中一个来调用Maven。请仔细查看配置页面。我建议您设置JAVA\u HOME
环境变量,就像Pascal所说的:
在Cygwin中,如果使用bash作为shell,则应:
export JAVA_HOME=/cygdrive/c/pathtothejdk
将javabin
目录路径预先添加到path
环境变量中也不会有任何伤害:
export PATH=${JAVA_HOME}/bin:${PATH}
还要添加maven-enforce-plugin
,以确保使用了正确的JDK。这对你的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>
org.apache.maven.plugins
.正如你所说的“另外,我不想对所有maven版本都使用1.6”……所以我最好说修改pom文件并指定使用哪个jdk版本
<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>
org.apache.maven.plugins
maven编译器插件
3.7.0
1.9
1.9
它将确保您的特定项目使用该版本的jdk。Maven使用变量$JAVACMD作为最终java命令,将其设置为java可执行文件所在的位置,将Maven切换到不同的jdk。Maven现在似乎给出了一个解决方案:
假设您的JAVA\u HOME
指向JDK7(它将运行maven进程)
您的pom.xml
可以是:
<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>
我在Windows7上的Eclipse中遇到了maven的构建问题
尽管我观察到mvn构建在命令行中运行得很好
mvn -T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ..\..\infra-scripts\maven-conf\settings.xml > output.log
Eclipse将JRE安装而不是JDK视为默认JVM,因此编译失败
我向eclipse.ini添加了以下行:
-vm
C:\Program Files (x86)\Java\jdk1.8.0_25\bin
此外,从eclipse开始时,我在以下列表的“目标”部分中使用了:
-T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ..\..\infra-scripts\maven-conf\settings.xml
编译错误已解决。具有允许您指定到javac
的路径
请注意,此用户属性仅在fork
为true
时有效,默认情况下false
$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile
如果该值包含空格,则可能需要双引号
> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:\...\javac" compile
另请参见。我知道这是一条旧线。但我在Maven for Java 8编译器源代码中遇到了一些类似的问题。我通过《思想》中提到的一个快速修复方法解决了这个问题,我可以把它放在这里,也许可以帮助其他人:
<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>
UTF-8
1.8
1.8
对于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>
maven编译器插件
3.7.0
9
9
管理多个jdk版本的另一种选择是
安装后,您只需“本地”更改java版本,即针对特定项目目录,方法如下:
jenv local 1.6
当您启用mvn插件时,这也将使mvn在本地使用该版本:
jenv enable-plugin maven
您还可以在主目录~/.mavenrc
中的文件中为Maven设置JDK:
JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk/Contents/Home'
此环境变量将由mvn脚本检查,并在出现时使用:
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
如果您通过brew
在Mac
中安装了Java,那么您很可能会在此处找到您的Java主目录:
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
现在的下一步是找到maven指向的javahome
目录。要查找它,请在命令中键入:
mvn-版本
我们感兴趣的领域如下:
Java版本
和运行时
Maven目前指向Java13
。此外,您还可以在key runtime下看到Java主路径,即:
/usr/local/ceral/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home
要更改maven的Java版本,我们需要将java8
home路径添加到javahome
env变量中
为此,我们需要运行以下命令:
export JAVA_HOME=/Library/JAVA/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/HOME
在候机楼
现在,如果我们检查maven版本,我们可以看到它现在指向Java8
问题是,如果在新终端中再次检查maven版本,您会发现它指向Java13。为了避免这种情况,我建议在~/.profile
文件中添加JAVA\u HOME
变量
这样,无论何时加载终端,它都将采用默认情况下在JAVA_主页中定义的值。这是您需要添加到~/.profile
文件中的行:
export JAVA_HOME=/Library/JAVA/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/HOME
您可以打开一个新的终端并检查Maven版本(mvn-version
),您会发现它这次指向Java 8。使用下面的命令对我也很有效,在这里安装Java 8之后立即使用它
OP是在命令行上构建hudson插件,而不是在hudson下(至少,这是我的理解)
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
export JAVA_HOME=$(/usr/libexec/java_home)