如何为插件和库配置不同的 distributionManagement 存储库?

How to configure distinct distributionManagement repositories to plugins and libs?

我正在尝试配置父 POM 的 distributionManagement 部分以允许将库和插件上传到不同的 Artifactory 存储库,但 Maven 3 仅支持 distributionManagement 配置的一部分。

由于我使用不同的存储库下载插件和库,并且无法为每种类型的工件创建一个父 POM,是否可以配置不同的存储库以让 Artifactory 或简单的 maven 识别工件的类型并部署到正确的存储库?

这是当前的 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ornanization</groupId>
    <artifactId>corporative-parent</artifactId>
    <packaging>pom</packaging>
    <distributionManagement>
        <repository>
            <id>artifactoryRelease</id>
            <name>artifactory-libs-releases<name>
            <url>${artifactory.url}/libs-release-local</url>
        </repository>
        <snapshotRepository>
            <id>artifactorySnapshot</id>
            <name>artifactory-libs-snapshots</name>
            <url>${artifactory.url}/libs-snapshot-local</url>
        </snapshotRepository>
    </distributionManagement>
</project>

这是我要添加的条目:

<distributionManagement>
    <repository>
        <id>artifactoryRelease</id>
        <name>artifactory-plugins-releases</name>
        <url>${artifactory.url}/plugins-release-local</url>
    </repository>
    <snapshotRepository>
        <id>artifactorySnapshot</id>
        <name>artifactory-plugins-snapshots</name>
        <url>${artifactory.url}/plugins-snapshot-local</url>
    </snapshotRepository>
</distributionManagement>

p.s.: 正如Artifactory's User Guidethis page中所述,不可能"deploy build artifacts to remote or virtual repositories"只对本地存储库,所以不可能让Artifactory的布局管理识别神器的类型。

只是不要使用 <distributionManagement> 而是使用 Artifactory Maven Plugin

配置的<repoKey>标签允许你使用变量(环境和项目定义)。只需定义一个代表插件和库存储库的变量,并在相应的项目中设置值。

此外,您将在部署时获得完整的 Build Info BOM 作为奖励。

感谢@JBaruch 给 "define a variable that will represent plugin and lib repositories" 的提示,我首先研究了从变量激活的 maven 配置文件,并意识到如果满足特定条件就可以激活配置文件,所以我结束了使用以下解决方案:

<profile>
    <id>plugins-deploy-artifactory</id>
    <activation>
        <file>
            <exists>target/classes/META-INF/maven/plugin.xml</exists>
        </file>
    </activation>
    <distributionManagement>
        <repository>
            <id>artifactoryRelease</id>
            <name>artifactory-corporativo-releases</name>
            <url>${artifactory.url}/plugins-release-local</url>
        </repository>
        <snapshotRepository>
            <id>artifactorySnapshot</id>
            <name>artifactory-corporativo-snapshots</name>
            <url>${artifactory.url}/plugins-snapshot-local</url>
        </snapshotRepository>
    </distributionManagement>
</profile>

所以当神器是插件时,上面的配置文件被激活,否则,使用默认的distributionManagement。