Как я могу решить конфликт при публикации артефактов с классификатором в GitHub Packages, которые разделяют pom?

tl; dr: я пытаюсь решить эту проблему.

У меня есть проект, который создает платформенно-зависимый JAR и добавляет классификатор в соответствии с os-maven- плагин:

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

Когда я создаю и публикую artrifact с mvn --batch-mode deploy в GitHub Packages, я сталкиваюсь с ошибкой конфликта. Это связано с тем, что артефакты имеют общий pom (sentencepiece-0.0.2.pom), но артефакт JAR определяется значением os-maven-plugin (sentencepiece-0.0.2-XYZ.jar).

Как я могу ввести это определяемое плагином свойство во время сборки для создания уникальных имен артефактов?


person erip    schedule 26.01.2021    source источник
comment
Зачем нужен классификатор?   -  person khmarbaise    schedule 26.01.2021
comment
Потому что это артефакт JNI, зависящий от платформы   -  person erip    schedule 26.01.2021


Ответы (1)


Дай мне вторую попытку.

На элементы artifactId и version не могут влиять свойства, сгенерированные плагином. Чтобы повлиять на них, свойство должно быть указано в командной строке (или, возможно, непосредственно в POM).

Итак, у нас остался классификатор.

Вам нужно собрать все артефакты с классификаторами в одной сборке. Поэтому вам нужно изменить сборку таким образом, чтобы она собиралась для разных ОС за один раз. Я не знаю, возможно ли это (в зависимости от того, можете ли вы создать, например, для Windows в Linux), но, похоже, это единственный способ решения Maven для вашей проблемы.

Конечно, вы все равно можете попробовать такие трюки, как удаление POM после его развертывания, но, если возможно, этого следует избегать.

person J Fabian Meier    schedule 08.02.2021