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

时间:2011-03-12 23:23:19

标签: java maven-2 maven

我有一个项目使用“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中的代码,因为它是不包含在“运行时”类路径中。

我怎么能:

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

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

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

5 个答案:

答案 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或ar​​tifactory并使用deploy插件将jar放入其中。系统类路径只是一个受伤的世界。