maven - 将具有依赖项的特定 Artifact 复制到特定文件夹,将其余依赖项复制到另一个文件夹

标签 maven maven-dependency-plugin

我有一个有 5 个依赖项的 Maven 项目。其中两个(带有其传递依赖项)我需要在自定义位置拥有,让我们说 client/plugins .而其余的项目依赖项(也有传递依赖项)我需要在另一个位置,让我们说 client/modules .遵循 Apache Maven 文档中的示例,这是我的 <build>堵塞:

<build>
  <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.2</version>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <artifactItems>
                <artifactItem>
                    <groupId>my.groupid</groupId>
                    <artifactId>my-artifactid-one</artifactId>
                    <version>1.0-SNAPSHOT</version>
                    <outputDirectory>client/modules</outputDirectory>
                </artifactItem>
                <artifactItem>
                    <groupId>my.groupid</groupId>
                    <artifactId>my-artifactid-one</artifactId>
                    <version>1.1-SNAPSHOT</version>
                    <outputDirectory>client/modules</outputDirectory>
                </artifactItem>
            </artifactItems>
            <outputDirectory>client/plugins</outputDirectory>
        </configuration>
    </plugin>
  </plugins>
</build>

当我跑 mvn -U clean package命令,Maven 将所有项目依赖项及其传递依赖项复制到 client/plugins .因此,它会忽略我为特定 Artifact 设置的配置。

我该如何设置?

最佳答案

看起来仅使用一个目标是不可能实现这一目标的。所以我定义了两个 copy-dependencies目标。然后指定不同的输出目录并使用 excludeArtifactIds参数以排除不需要的 Artifact 。它看起来像这样:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.0.2</version>
            <executions>
                <execution>
                    <id>copy-plugins</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>client/plugins</outputDirectory>
                        <excludeArtifactIds>module-artifact-one, module-artifact-two </excludeArtifactIds>
                    </configuration>
                </execution>
                <execution>
                    <id>copy-modules</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>client/modules</outputDirectory>
                        <excludeArtifactIds>plugin-artifact-one, plugin-artifact-two</excludeArtifactIds>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

我跑 mvn -U clean package它按我现在的预期工作。

关于maven - 将具有依赖项的特定 Artifact 复制到特定文件夹,将其余依赖项复制到另一个文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46885246/

相关文章:

maven - 如何在插件中访问 Maven 的依赖关系层次结构

java - Maven 在 jar 中打包项目中的存储库依赖项

maven - 为单个 Jenkins 作业构建多个 Maven 配置文件

maven - 使用 maven cargo 插件部署到 $CATALINA_HOME

maven - 专家:`-U,-update-snapshots`到底做什么?

maven - 导出 Maven 依赖项并维护存储库文件夹结构

java - 获取有关 Maven 依赖项的聚合信息

java - Spring Boot jar 中的 application.properties 文件在哪里?

java - 是否可以针对不同版本重新编译jar?

maven - 从Maven项目下载所有插件依赖项