我想用给定的java home属性构建maven集成项目。我想在java中编写一个代码来设置InvocationRequest对象的java home属性。主要目标是使用java home(由算法)给出运行时来构建项目。所以我会调用getInvoker().execute(request);
来执行maven目标,其中request是InvocationRequest对象。
我尝试将请求java.home属性设置为
properties.setProperty(Goals.JAVA_HOME, javaHomePath);
并调用方法executeGoals(pom, new String[] { Goals.INSTALL, Goals.CLEAN }, properties);
。
这个executeGoals(...)方法也包含getInvoker()。执行(请求)调用和请求对象定义。
输出为:Missing: 1) com.sun:tools:jar:1.5.0
#Solved
编辑:解决了输出问题,但出现了一个新问题:
class file has wrong version 50.0, should be 49.0
。也许我改变了jre home,所以我认为我正在使用比我运行的更新版本的java编译。
提醒:我想用指定的java home属性构建=我想将编译器java home(或version)更改为指定的一个。 (在日食中)
我将不胜感激。
答案 0 :(得分:0)
我不认为它是可配置的。它是使用JAVA_HOME环境变量的Maven Core的一部分。请参阅接受的答案: How to set specific java version to Maven
此外,无法在Java进程中设置或更改环境变量(不是系统属性)(对于当前进程)。如果从Java进程中创建另一个进程,则会methods为此子进程指定环境变量。
也许解决方案是执行Maven命令,例如" mvn clean install"将特定的JAVA_HOME变量设置为子进程(这需要安装Maven并且mvn可用作命令)。使用ProcessBuilder切换到目标项目的pom.xml所在的工作目录,并在开始该过程之前设置适当的environment variable(s)。
如果不应在运行应用程序的环境中安装Maven,您还可以在应用程序中分发Maven安装(可能在单独的目录中)。然后你可以对这个发行版的mvn.bat或mvn.sh运行(取决于操作系统)。