«1. Введение

В этом руководстве мы рассмотрим, как преобразовать файл сборки Gradle в файл Maven POM. Мы также рассмотрим несколько доступных вариантов настройки.

2. Файл сборки Gradle

Давайте начнем со стандартного Java-проекта Gradle, gradle-to-maven, со следующим файлом build.gradle:

repositories {
    mavenCentral()
}

group = 'com.baeldung'
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 — содержащий jar с именем ${artifactId}-${version }.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.baeldung</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. Идентификатор группы, идентификатор артефакта и версия

Изменение идентификатора группы, идентификатора артефакта и версии POM может быть обработано в блоке установки:

install {
    repositories {
        mavenInstaller {
            pom.version = '0.0.1-maven-SNAPSHOT'
            pom.groupId = 'com.baeldung.sample'
            pom.artifactId = 'gradle-maven-converter'
        }
    }
}

Запуск задачи установки теперь создает файл POM с приведенной выше информацией: ~ ~~

<groupId>com.baeldung.sample</groupId>
<artifactId>gradle-maven-converter</artifactId>
<version>0.0.1-maven-SNAPSHOT</version>

4.2. Каталог и имя POM

Иногда нам может понадобиться скопировать файл POM в другой каталог и с другим именем. Поэтому давайте добавим в блок установки следующее:

pom.writeTo("${mavenPomDir}/${project.group}/${project.name}/pom.xml")

Атрибут mavenPomDir предоставляется плагином, который будет указывать на build/poms. Мы также можем указать абсолютный путь к любому каталогу, в который мы хотим скопировать файл POM.

После запуска задачи установки мы можем увидеть файл pom.xml внутри build/poms/com.baeldung/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.