Maven exec插件 – 如何包含“系统”类路径?

我有一个项目,使用“系统”范围来指定我的项目的WEB-INF/lib目录中包含的jar文件。 此工件不在任何maven存储库中,因此我必须将其作为项目的一部分包含在内。 我这样做有以下几点:

   com.example MySpecialLib 1.2 system ${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar  

这对大多数事情都很有用。

但现在我试图在命令行上运行一些代码(在我的webapp之外,通过我添加的main()方法)和mvn exec:java无法解析MySpecialLib中的代码,因为它不包含在“运行时”中“类路径。

我怎么能:

  • 将MySpecialLib添加到运行时类路径中

要么

  • 告诉mvn exec:java也使用system类路径?

我已经尝试过mvn exec:java -Dexec.classpathScope=system ,但这会遗漏runtime所有内容。

使用’compile’作用域来运行maven exec插件 – mvn exec:java -Dexec.classpathScope=compile 。 这将包括系统范围的依赖项。

有趣的是知道classpathScope=system会丢弃runtime依赖性。 我发现通过将它作为pluginpom.xml可以作为替代方案。 如果它也适合你,请你试试让我知道吗?

所以我添加了一个系统级依赖项到commons-collection,就像你对你的工件一样:

   commons-collections commons-collections 3.0 system C:\\\\commons-collections-3.0.jar  

然后在标签中我有exec-maven-plugin插件在install阶段执行: –

  org.codehaus.mojo exec-maven-plugin 1.1   install  java   com.stackoverflow.test.App     

然后我运行了mvn install 。 我还确保com.stackoverflow.test.App类有一些代码可以调用commons-collections-3.0

希望这可以帮助。

请参阅具有依赖项的Maven 2程序集:不包括范围“系统”下的jar

正确的答案是使用maven-install-plugin并将Jar放入您的本地回购中。 或者,更好的是,运行nexus或ar​​tifactory并使用deploy插件将jar放入其中。 系统类路径只是一个受伤的世界。

正如EG指出的那样,解决方案是在运行exec时使用编译范围。

在每次调用时:

 mvn exec:java -Dexec.classpathScope=compile 

或者直接在exec-plugin-configuration中:

   org.codehaus.mojo exec-maven-plugin ...  compile