将带有分类器的工件发布到共享 pom 的 GitHub 包时,如何解决冲突?

问题描述

tl;dr:我正在尝试解决 this 问题。

我有一个项目,它构建了一个依赖于平台的 JAR 并根据 os-maven-plugin 添加一个分类器:

<modelVersion>4.0.0</modelVersion>
<groupId>com.github.levyfan</groupId>
<artifactId>sentencepiece</artifactId>
<version>0.0.2</version>


<build>
    <extensions>
        <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>1.6.1</version>
        </extension>
    </extensions>
    <!-- ... -->
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <classifier>${os.detected.classifier}</classifier>
            </configuration>
        </plugin>
    </plugins>
</build>

当我使用 mvn --batch-mode deploy 构建工件并将其发布到 GitHub 包时,我遇到了冲突错误。这是因为工件共享一个 pom (sentencepiece-0.0.2.pom),但 JAR 工件由 os-maven-plugin 值 (sentencepiece-0.0.2-XYZ.jar) 确定。

如何在构建时注入此插件定义的属性以创建唯一的工件名称

解决方法

让我再试一次。

项目 artifactIdversion 不会受到插件生成的属性的影响。要影响它们,必须在命令行中(或者直接在 POM 中)提供属性。

所以我们只剩下分类器了。

您需要在同一个构建中使用分类器构建所有工件。因此,您需要以一种一次性为不同操作系统构建的方式更改构建。我不知道这是否可行(取决于您是否可以为 Linux 上的 Windows 构建),但它似乎是您问题的唯一“Maven 方式”解决方案。

当然,您仍然可以尝试在部署后删除 POM 之类的技巧,但如果可能的话,应该避免这种情况。