将 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-dependencyfourth-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-dependencyfourth-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>