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

Geo*_*old 15 java maven-2 maven

我有一个项目,使用"系统"范围来指定我的项目的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>
Run Code Online (Sandbox Code Playgroud)

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

但是现在我正在尝试在命令行上运行一些代码(在我的webapp之外,通过main()我添加的方法)并且mvn exec:java无法解析MySpecialLib中的代码,因为它没有包含在"运行时"类路径中.

我怎么能:

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

要么

  • 告诉mvn exec:java也使用systemclasspath?

我已经尝试过mvn exec:java -Dexec.classpathScope=system,但这样就不会有任何问题runtime.

小智 15

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


Coo*_*ans 1

有趣的是知道它classpathScope=system会降低runtime依赖性。我发现通过将其作为替代方案包含plugin在作品中pom.xml。您能尝试让我知道它是否也适合您吗?

因此,我向 commons-collection 添加了系统级依赖项作为示例,就像您的工件一样:-

 <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>
Run Code Online (Sandbox Code Playgroud)

然后在<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>
Run Code Online (Sandbox Code Playgroud)

然后我就跑了mvn install。我还确保com.stackoverflow.test.App类有一些从commons-collections-3.0.

希望这可以帮助。