Плагин Gradle War - переименовать библиотеки - PullRequest
0 голосов
/ 03 августа 2020

Я начинаю углубляться в Gradle, перенося один имеющийся у меня проект с Maven 3.6.3 на Gradle 6.5.1.

Я подхожу к стадии, когда мне нужно создать файл War в модуль impl, который немного настроен: я переименовываю Jars в папке lib и включаю через оверлей (из Jar, встроенного в модуль api из того же проекта) некоторые ресурсы. Текущая конфигурация Maven следующая:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <outputFileNameMapping>@{groupId}@-@{artifactId}@-@{version}@.@{extension}@</outputFileNameMapping>
    <webResources>
      <resource>
        <directory>src/main/webapp</directory>
      </resource>
    </webResources>
    <overlays>
      <!-- Include the OpenAPI spec -->
      <overlay>
        <groupId>com.project.rest</groupId>
        <artifactId>api</artifactId>
        <type>jar</type>
        <includes>
          <include>specs/</include>
        </includes>
      </overlay>
    </overlays>
  </configuration>
</plugin>

Итак, я пытаюсь придумать что-то подобное для Gradle в отношении переименования библиотек. Я видел в документации плагина, что в плагине есть метод rename:

Переименовывает исходный файл. Замыкание будет вызываться с одним параметром - именем файла. Замыкание должно вернуть объект String с новым целевым именем. Замыкание может вернуть значение null, и в этом случае будет использоваться исходное имя.

Проблема в том, что он принимает имя файла в параметре, тогда как мне нужно (чтобы mimi c параметр outputFileNameMapping), чтобы получить зависимость и извлечь ее метаданные. Так что я считаю, что это неправильный вариант. Есть ли способ добиться этого с помощью Gradle?

Спасибо

1 Ответ

1 голос
/ 03 августа 2020

Плагин gradle war имеет ряд параметров конфигурации, включая archiveFileName (или archiveName в старых версиях gradle). archiveFileName по умолчанию имеет значение: [archiveBaseName] - [archiveAppendix] - [archiveVersion] - [archiveClassifier]. [archiveExtension]

Это можно объявить в блоке war {} в вашем build.gradle. Вы должны иметь возможность сделать что-то вроде этого:

war {
  archiveFileName = "${project.group}-${project.name}-$archiveVersion.$archiveExtension"
}

Подробнее о доступных параметрах конфигурации см. документацию War

Это переименует сам файл войны. .

Если вы хотите вместо этого переименовать содержимое файла war, вы можете использовать war.rootSpe c .rename (), например:

// make a copy of the implementation configuration that can be resolved so we can loop over it.
configurations {
    implementationList {
        extendsFrom implementation
        canBeResolved true
    }
}

war {
    rootSpec.rename({ fileInWar ->
        def returnValue = fileInWar
        project.configurations.implementationList.resolvedConfiguration.resolvedArtifacts.each {
            if (it.file.name == fileInWar) {
                def depInfo = it.moduleVersion.id
                print "$returnValue -> "
                returnValue = "${depInfo.group}.${depInfo.name}-${depInfo.version}.${it.extension}"
                println "$returnValue"
            }
        }
        return returnValue
    })
}

Однако учтите, что это не разрешит конфликты, если у вас есть повторяющиеся зависимости.

...