当前位置: 首页 > 面试题库 >

Maven调用者:IllegalStateException

商运锋
2023-03-14
问题内容

我有一个多模块Maven项目(https://github.com/veniltonjr/msplearning)

我的一个模块 ,我需要运行程序从Maven构建命令“全新安装,但是当我调用这些目标出现以下错误执行:

java.lang.IllegalStateException: 未指定Maven应用程序目录,并且系统属性中未提供$ {maven.home}。
请至少指定其中一个。

在Maven Invoker文档中,据说M2_HOME环境变量必须存在。

我的SO中已经设置了此变量。这不足以使该方法invoke起作用吗?遵循我运行相关方法的代码片段:

Invoker invoker = new DefaultInvoker();
invoker.setLocalRepositoryDirectory(new File("C:\\git\\msplearning"));

InvocationRequest request = new DefaultInvocationRequest();
request.setGoals(Arrays.asList("clean", "install"));
InvocationResult result = invoker.execute(request); // Exception occours here...

已经,谢谢!

编辑(解决方案)

我必须设置POM,还必须设置Maven Home,在我的情况下,它位于M3_HOME环境变量中:

InvocationRequest request = new DefaultInvocationRequest();
request.setPomFile(new File("C:\\git\\msplearning\\pom.xml"));
request.setGoals(Collections.singletonList("verify"));

Invoker invoker = new DefaultInvoker();
invoker.setMavenHome(new File(System.getenv("M3_HOME")));
InvocationResult result = invoker.execute(request);

谢谢@RobertScholte和@khmarbaise!


问题答案:

设置request.pomFilerequest.baseDirectory以便Invoker都知道应该从哪个目录或文件执行Apache
Maven。



 类似资料:
  • 调度者抽象了执行工作的机制。 执行工作不同的机制包括同线程,派遣队列,操作队列,创建线程,线程池,运行循环等 调度者有两个主要的操作。observeOn 和 subscribeOn。 如果你想要在不同的调度者上执行工作,只需要调用 observeOn(scheduler) 操作符。 你将经常使用 observeOn 大大多于使用 subscribeOn。 假如 observeOn 没有显示指定,

  • 编辑3:我也试图通过这个线程中提到的java选项参数来设置maven代理。 编辑2:我确信intellij idea使用相同的设置。xml,与system maven相同的maven二进制文件和相同的本地存储库。 编辑1:我试图检查每个工作负载的构建日志,主要区别是如何在构建日志的最开始调用maven。 对于intellij idea,如下所示: 对于系统外壳,maven刚刚启动时没有这个调用信息

  • 我需要你的帮助,请理解调试一个maven应用程序使用Wildfly和Intellij的想法。 谢谢,

  • 问题内容: 我正在使用以下代码来获取JavaScript调用者函数的名称: 有没有办法发现调用该方法的行号? 另外,是否有办法获取调用该方法的JavaScript文件的名称?还是源URL? 问题答案: 这适用于我在chrome / QtWebView中

  • 此错误“”getter'uid'在null上被调用。receiver:null尝试调用:uid“ 退出按钮: 控制台: widgets库捕获的异常接收者:null尝试调用:uid 相关的导致错误的小部件是:Qr file://g://androidstudioprojects/facem/lib/screens/home/home.dart:687:67当抛出异常时,这是堆栈:#0 object.