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
依赖性。 我发现通过将它作为plugin
在pom.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或artifactory并使用deploy插件将jar放入其中。 系统类路径只是一个受伤的世界。
正如EG指出的那样,解决方案是在运行exec时使用编译范围。
在每次调用时:
mvn exec:java -Dexec.classpathScope=compile
或者直接在exec-plugin-configuration中:
org.codehaus.mojo exec-maven-plugin ... compile