将 Maven 依赖解包到 类,保持传递依赖
Unpack Maven dependency into classes, keeping transitive dependencies
我正在尝试将 Maven 依赖项 jar 的内容解压缩到我的 classes
文件夹中,同时包含传递依赖项。我也不想解压我项目的所有依赖项。只有一个会很好,如果我可以对它们的列表执行此操作会更好。找到了类似的解决方案,但没有解决我的确切问题。
示例主项目 Pom:
.
.
.
<dependencies>
<dependency>
<groupId>com.test.dep</groupId>
<artifact>first-dependency</artifact>
</dependency>
<dependency>
<groupId>com.test.dep</groupId>
<artifact>second-dependency</artifact>
</dependency>
</dependencies>
.
.
.
第二依赖 Pom 示例:
.
.
.
<dependencies>
<dependency>
<groupId>com.test.dep</groupId>
<artifact>third-dependency</artifact>
</dependency>
<dependency>
<groupId>com.test.dep</groupId>
<artifact>fourth-dependency</artifact>
</dependency>
</dependencies>
.
.
.
我希望将 second-dependency
解压到嵌套在 target
下的 classes
文件夹中,并且还想要任何工件(third-dependency
、fourth-dependency
)它取决于是否仍包含在我的 lib
文件夹中(未解压)。
我尝试了以下方法(不包括我的依赖项中的工件):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.test.dep</groupId>
<artifactId>second-dependency</artifactId>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includes>**/*</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
这确实在我的 classes
文件夹中包含 second-dependency
的内容,但在我的主要项目 lib
中不包含 third-dependency
或 fourth-dependency
目录。
有什么想法吗?
尝试使用以下插件配置,基于 dependency:unpack-dependencies 的描述参数,而不是:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includeArtifactIds>second-dependency</includeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
我不确定你的用例。
但是如果你想构建 jar,这听起来像是 maven-shade-plugin 的一个用例。该插件能够将项目本身的 类 和资源以及一组指定的工件(依赖项)打包到一个 jar 中。
只需定义工件本身 ("${project.groupId}:${project.artifactId}") 和要包含的 "second dependency"。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<configuration>
<artifactSet>
<includes>
<include>${project.groupId}:${project.artifactId}</include>
<include>com.test.dep:second-dependency</include>
</includes>
</artifactSet>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
我正在尝试将 Maven 依赖项 jar 的内容解压缩到我的 classes
文件夹中,同时包含传递依赖项。我也不想解压我项目的所有依赖项。只有一个会很好,如果我可以对它们的列表执行此操作会更好。找到了类似的解决方案,但没有解决我的确切问题。
示例主项目 Pom:
.
.
.
<dependencies>
<dependency>
<groupId>com.test.dep</groupId>
<artifact>first-dependency</artifact>
</dependency>
<dependency>
<groupId>com.test.dep</groupId>
<artifact>second-dependency</artifact>
</dependency>
</dependencies>
.
.
.
第二依赖 Pom 示例:
.
.
.
<dependencies>
<dependency>
<groupId>com.test.dep</groupId>
<artifact>third-dependency</artifact>
</dependency>
<dependency>
<groupId>com.test.dep</groupId>
<artifact>fourth-dependency</artifact>
</dependency>
</dependencies>
.
.
.
我希望将 second-dependency
解压到嵌套在 target
下的 classes
文件夹中,并且还想要任何工件(third-dependency
、fourth-dependency
)它取决于是否仍包含在我的 lib
文件夹中(未解压)。
我尝试了以下方法(不包括我的依赖项中的工件):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.test.dep</groupId>
<artifactId>second-dependency</artifactId>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includes>**/*</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
这确实在我的 classes
文件夹中包含 second-dependency
的内容,但在我的主要项目 lib
中不包含 third-dependency
或 fourth-dependency
目录。
有什么想法吗?
尝试使用以下插件配置,基于 dependency:unpack-dependencies 的描述参数,而不是:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includeArtifactIds>second-dependency</includeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
我不确定你的用例。
但是如果你想构建 jar,这听起来像是 maven-shade-plugin 的一个用例。该插件能够将项目本身的 类 和资源以及一组指定的工件(依赖项)打包到一个 jar 中。
只需定义工件本身 ("${project.groupId}:${project.artifactId}") 和要包含的 "second dependency"。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<configuration>
<artifactSet>
<includes>
<include>${project.groupId}:${project.artifactId}</include>
<include>com.test.dep:second-dependency</include>
</includes>
</artifactSet>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>