我有一个项目,我希望在当前项目的后期执行阶段调用M2 repo中的另一个Jar文件。
我的POM的示例骨架
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>exec-one</id> <phase>verify</phase> <configuration> executable>java</executable> <arguments> <argument>-jar</argument> <argument>JarToInvoke.jar</argument> </arguments> <**workingDirectory**>/C:/path to repo</workingDirectory> </configuration> <goals> <goal>exec</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>GroupId of JarToInvoke</groupId> <artifactId>JarToInvoke</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> </dependencies> </plugin> </plugins>
我尝试使用maven-exec-plugin,但遇到以下问题;
我需要指定JarToInvoke依赖项吗?作为项目依赖项还是作为exec-plugin依赖项?
通过对工作目录(/ C:/ repo)进行硬编码,我可以调用JarToInvoke工件。但这不是一个好的解决方案,因为最终这个项目应该在任何具有不同操作系统的m / c中运行。那么如何让exec-plugin在项目的M2 repo中搜索JarToInvoke工件(默认类路径)?
3.在工作目录中对M2 repo路径进行硬编码时,我能够调用JarToInvoke工件。但是在运行JarToInvoke工件时,它会抛出另一个依赖项问题,但找不到JarToInvoke的一些log4j依赖项。我将JarToInvoke设为阴影jar,它按预期工作。但它不是永久性或良好的解决方案(因为阴影罐的大小为35 MB)。如何指示exec-plugin在M2 repo中查找依赖的Jars。
请分享您的建议。在此先感谢。
答案 0 :(得分:1)
Exec插件文档中的这个example page描述了我想要的内容。
如果您可以使用exec:java
目标而不是exec:exec
,则会为您找到JVM。您还可以通过更改插件的includeProjectDependencies
和includePluginDependencies
配置选项来引入插件依赖项或项目依赖项。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>exec-one</id>
<phase>verify</phase>
<configuration>
<includeProjectDependencies>false</includeProjectDependencies>
<includePluginDependencies>true</includePluginDependencies>
<executableDependency>
<groupId>GroupId of JarToInvoke</groupId>
<artifactId>JarToInvoke</artifactId>
</executableDependency>
<!-- Look up the main class from the manifest inside your dependency's JAR -->
<mainClass>com.example.Main</mainClass>
<arguments>
<!-- Add any arguments after your JAR here --->
</arguments>
</configuration>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>GroupId of JarToInvoke</groupId>
<artifactId>JarToInvoke</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
唯一的缺点是你必须在JAR中显式指定要运行的主类。您可以通过打开依赖项JAR中的清单并读取Main-Class属性来查找它。
如果确实需要使用exec:exec
,您可以使用Maven Dependency Plugin的copy-dependencies目标将依赖项从本地存储库复制到预定义位置(例如{ {1}} / exec-jars)然后你可以在exec插件的${project.build.directory}
配置选项中提供这个目录。
答案 1 :(得分:1)
找到jar文件的绝对路径可能更简单的方法是使用properties
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<goals>
<goal>properties</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>exec-one</id>
<phase>verify</phase>
<configuration>
<executable>java</executable>
<arguments>
<argument>-jar</argument>
<argument>${GroupIdofJarToInvoke:JarToInvoke:jar}</argument>
</arguments>
<workingDirectory>/C:/path to repo</workingDirectory>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<dependencies>
<dependency>
<groupId>GroupIdofJarToInvoke</groupId>
<artifactId>JarToInvoke</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependencies>
目标。
self.response.write(json.encode(self.getVertices()))