我有一个项目使用“system”范围指定项目WEB-INF/lib
目录中包含的jar文件。此工件不在任何maven存储库中,因此我必须将其作为项目的一部分包含在内。我是这样做的:
<dependency>
<groupId>com.example</groupId>
<artifactId>MySpecialLib</artifactId>
<version>1.2</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar</systemPath>
</dependency>
这对大多数事情都很有用。
但是现在我正在尝试在命令行上运行一些代码(在我的webapp之外,通过我添加的main()
方法)并且mvn exec:java
无法解析MySpecialLib中的代码,因为它是不包含在“运行时”类路径中。
我怎么能:
或
mvn exec:java
还要使用system
类路径?我已尝试过mvn exec:java -Dexec.classpathScope=system
,但这会遗漏runtime
上的所有内容。
答案 0 :(得分:14)
使用'compile'范围运行maven exec插件 - mvn exec:java -Dexec.classpathScope=compile
。这将包括系统范围的依赖项。
答案 1 :(得分:1)
有兴趣知道classpathScope=system
删除了runtime
个依赖关系。我发现将plugin
作为pom.xml
包含在 <dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.0</version>
<scope>system</scope>
<systemPath>C:\\<some_path>\\commons-collections-3.0.jar</systemPath>
</dependency>
作为替代方案。如果它也适合你,请你试试让我知道吗?
所以我将一个系统级依赖项添加到commons-collection中,就像你对你的工件一样: -
<build>
然后在exec-maven-plugin
代码中,我有install
插件在<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.stackoverflow.test.App</mainClass>
</configuration>
</execution>
</executions>
</plugin>
阶段执行: -
mvn install
然后我跑了com.stackoverflow.test.App
。我还确保commons-collections-3.0
类有一些代码可以从{{1}}调用一个类。
希望这有帮助。
答案 2 :(得分:1)
答案 3 :(得分:1)
作为E.G.指出,解决方案是在运行exec时使用 compile 作用域。
在每次调用时:
mvn exec:java -Dexec.classpathScope=compile
或直接在exec-plugin-configuration中配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
...
<configuration>
<classpathScope>compile</classpathScope>
</configuration>
</plugin>
答案 4 :(得分:0)
正确的答案是使用maven-install-plugin并将Jar放入您的本地回购中。或者,更好的是,运行nexus或artifactory并使用deploy插件将jar放入其中。系统类路径只是一个受伤的世界。