1. Введение
В этом руководстве мы рассмотрим, как преобразовать файл сборки Gradle в файл Maven POM. Мы также рассмотрим несколько доступных вариантов настройки.
2. Файл сборки Gradle
Начнем со стандартного Java-проекта Gradle, gradle-to-maven
, `со следующим файлом
build.gradle` :
repositories {
mavenCentral()
}
group = 'com.foreach'
version = '0.0.1-SNAPSHOT'
apply plugin: 'java'
dependencies {
compile('org.slf4j:slf4j-api')
testCompile('junit:junit')
}
3. Плагин Maven
Gradle поставляется с подключаемым модулем Maven , который добавляет поддержку преобразования файла Gradle в файл Maven POM. Он также может развертывать артефакты в репозиториях Maven.
Чтобы использовать это, давайте добавим плагин Maven в наш файл build.gradle
:
apply plugin: 'maven'
Плагин использует группу
и версию
, представленные в файле Gradle, и добавляет их в файл POM. Кроме того, он автоматически берет артефакт
из имени каталога.
Плагин также автоматически добавляет задачу установки .
Итак, чтобы преобразовать, давайте запустим следующее:
gradle install
Выполнение приведенной выше команды создает каталог сборки
с тремя подкаталогами:
libs —
содержит банку с именем${artifactId}-${версия}.jar
poms
—
содержащий преобразованный файл POM с именемpom-default.xml
tmp/jar —
содержащий манифест
Сгенерированный файл POM будет выглядеть так:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foreach</groupId>
<artifactId>gradle-to-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Задача установки
также загружает сгенерированный файл POM и JAR в локальный репозиторий Maven.
4. Настройка плагина Maven
В некоторых случаях может быть полезно настроить информацию о проекте в сгенерированном файле POM. Давайте взглянем.
4.1. идентификатор группы, идентификатор
артефакта
и версия
Изменение groupId
, артефакта
и версии
POM можно выполнить в блоке установки :
install {
repositories {
mavenInstaller {
pom.version = '0.0.1-maven-SNAPSHOT'
pom.groupId = 'com.foreach.sample'
pom.artifactId = 'gradle-maven-converter'
}
}
}
Запуск задачи установки
теперь создает файл POM с приведенной выше информацией:
<groupId>com.foreach.sample</groupId>
<artifactId>gradle-maven-converter</artifactId>
<version>0.0.1-maven-SNAPSHOT</version>
4.2. Каталог и имя POM
Иногда нам может понадобиться скопировать файл POM в другой каталог и с другим именем . Поэтому добавим в блок install следующее:
pom.writeTo("${mavenPomDir}/${project.group}/${project.name}/pom.xml")
Плагин предоставляет атрибут mavenPomDir , который указывает на
build/poms
. Мы также можем указать абсолютный путь к любому каталогу, в который мы хотим скопировать файл POM.
После запуска задачи установки мы можем увидеть
pom.xml
внутри build/poms/com.foreach/gradle-to-maven
.
4.3. Автоматически сгенерированный контент
Плагин Maven также упрощает изменение любого из сгенерированных элементов POM. Например, чтобы сделать зависимость необязательной, мы можем добавить следующее замыкание в pom.whenConfigured:
pom.whenConfigured { pom ->
pom.dependencies.find {dep -> dep.groupId == 'junit' && dep.artifactId == 'junit' }.optional = true
}
Это создаст необязательный
атрибут, добавленный к зависимости
:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
<optional>true</optional>
</dependency>
4.4. Дополнительная информация
Наконец, если мы хотим добавить дополнительную информацию, мы можем включить любой поддерживаемый Maven элемент в построитель pom.project
.
Добавим немного информации о лицензии:
pom.project {
inceptionYear '2020'
licenses {
license {
name 'My License'
url 'http://www.mycompany.com/licenses/license.txt'
distribution 'repo'
}
}
}
Теперь мы можем видеть информацию о лицензии, добавленную в POM:
<inceptionYear>2020</inceptionYear>
<licenses>
<license>
<name>My License</name>
<url>http://www.mycompany.com/licenses/license.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
5. Вывод
В этом кратком руководстве мы узнали, как преобразовать файл сборки Gradle в Maven POM.
Как всегда, исходный код из этой статьи можно найти на GitHub .