【发布时间】:2015-10-27 21:50:16
【问题描述】:
我正在尝试构建一个 Maven 父项目脚本,其中包含一个 3rd 方项目(及其所有依赖项)和我的另外几个项目。
我想将所有依赖项(我的意思是 ALL 依赖项,包括其他依赖项请求的 jars 又由我的一个子项目请求)复制到父项目目录,例如“lib”,这样我就可以使用通配符类路径运行 java:
java -cp "lib/*" package.blah.blah.Main
我尝试了使用maven-dependency-plugin 的各种方法,例如copy-dependencies,但我只能将 Maven 指向我自己的子项目,而不是它们的依赖项(我的意思是在父项目 pom 中)。
这是我一直在写的父项目pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<properties>
<server.version>7.0.2</server.version>
<ext.version>1.0-alpha3-SNAPSHOT</ext.version>
</properties>
<modelVersion>4.0.0</modelVersion>
<groupId>org.kontalk</groupId>
<artifactId>tigase-kontalk</artifactId>
<version>devel</version>
<packaging>pom</packaging>
<modules>
<module>../tigase-server/modules/master</module>
<module>../tigase-extension</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-artifact</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.kontalk</groupId>
<artifactId>tigase-server</artifactId>
<version>${server.version}</version>
<type>jar</type>
</artifactItem>
<artifactItem>
<groupId>org.kontalk</groupId>
<artifactId>tigase-extension</artifactId>
<version>${ext.version}</version>
<type>jar</type>
</artifactItem>
</artifactItems>
<outputDirectory>bin</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.kontalk</groupId>
<artifactId>tigase-server</artifactId>
<version>${server.version}</version>
</dependency>
<dependency>
<groupId>org.kontalk</groupId>
<artifactId>tigase-extension</artifactId>
<version>${ext.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
它将仅复制 bin 目录中的两个直接子项目 jar,而不会复制其他任何内容。
我正在考虑进行手动复制(如在 Maven 副本中)以粗暴地从我的子项目的 target/dependency 目录中复制所有 jar,但它看起来......很残酷。
如果用现有的 Maven 软件做不到,我什至可以满足于直接使用 maven exec(我希望它应该自动设置类路径,对吧?)
编辑:我想尽可能少地修改子项目 pom,尤其是第 3 方。
【问题讨论】:
-
"java -cp lib/*.jar" 恐怕这行不通。这个表达式将被解析为“java -cp lib/lib1.jar lib/lib2.jar ...”而不是“java -cp lib/lib1.jar:lib/lib2.jar:...”
-
抱歉,我已将其修复为不进行 shell 转义。