Gradle: опубликуйте готовый jar-файл в репозиторий Maven с зависимостями.

В Stackoverflow уже есть вопросы о публикации предварительно созданных jar-файлов в Maven из Gradle. Однако это немного отличается: как опубликовать предварительно созданный Jar в репозитории Maven и в то же время предоставить зависимости для включения в файл pom.xml?

У меня есть банка, которая предварительно создается за пределами этого скрипта. Мне нужно опубликовать эту банку в нашем репозитории Maven (Nexus) и указать зависимости в файле pom.xml. Мне удалось опубликовать предварительно созданную банку в репозитории Maven, используя закрытие артефактов, но она игнорирует закрытие зависимостей. Если я добавлю плагин java, тогда плагин Maven создаст pom с зависимостями, но загрузит файл jar с нулевым байтом. Я предполагаю, что это связано с тем, что плагин Java собирается скомпилировать и упаковать исходный код в каталоге src, которого нет в этом проекте.

Есть ли способ «внедрить» предварительно созданный Jar в процесс плагина Java, чтобы я мог загрузить jar вместе с зависимостями? Или я упускаю что-то еще очевидное?

Конечно, лучше всего было бы, чтобы процесс сборки предварительно созданного Jar обрисовал в общих чертах его зависимости и загрузил в Maven, но, к сожалению, это стороннее программное обеспечение, и мы не можем его контролировать.

Ниже скрипт публикует jar-файл с нулевым kb...

apply plugin: 'java'
apply plugin: 'maven'
jar = file(projectHome + '/build/lib').listFiles()[0]
configurations {
    archives
    runtime
}
dependencies {
    runtime 'org.apache.tika:tika-app:1.3'
}
artifacts {
    archives jar
}
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://build.com/nexus/content/repositories/releases/")
            pom.version = tag
            pom.artifactId = "artifact"
            pom.groupId = "group"
        }
    }
} 

Большое спасибо! Роб


person Robert Watts    schedule 06.08.2013    source источник
comment
Вы можете использовать mavenDeployer POM DSL для добавления зависимостей (см. руководство пользователя).   -  person Peter Niederwieser    schedule 07.08.2013
comment
Спасибо, Питер. На самом деле я решил эту проблему, используя совершенно другой метод, создав собственный плагин. Было бы полезно увидеть ответ, поскольку я не мог заставить его работать с помощью POM DSL.   -  person Robert Watts    schedule 17.08.2013


Ответы (1)


Мы можем опубликовать предварительно созданный jar-файл в репозитории Maven с помощью Gradle, используя плагин java и плагин maven-publish. maven-publish имеет функцию внедрения зависимостей в сгенерированный pom с помощью блока pom.withXml.

Настоящим я даю образец файла build.gradle, который создает pom.xml предварительно созданного артефакта с указанными зависимостями. Вы можете попробовать это предложение, как показано ниже.

apply plugin: "maven-publish"
apply plugin: "java"



dependencies {
    compile "dependency:antlr:2.7.7"
    compile "dependency:commons-beanutils:1.9.3"
    compile "dependency:dom4j:1.6.1"
    compile "dependency:jettison:1.3.8"
}

publishing {

    repositories {
        maven {
            url "$mavenUrl"
            credentials {
                username = "$mavenUser"
                password = "$mavenPwd"

        }
        }
    }
    publications {
        maven(MavenPublication) {
            groupId "test"
            artifactId "myArtifact"
            version "1.0"
            artifact ("/scratch/test/jars/myArtifact.jar")
            pom.withXml {
                def dependencies  = asNode().appendNode("dependencies")
                configurations.compile.allDependencies.each {  dep ->
                    def depNode  = dependencies.appendNode("dependency")
                    depNode.appendNode("groupId", dep.group)
                    depNode.appendNode("artifactId", dep.name)
                    depNode.appendNode("version", dep.version)
                }       
            }
        }
    }
}

Сгенерированный pom будет выглядеть так, как показано ниже.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>myArtifact</artifactId>
  <version>1.0</version>
  <dependencies>
    <dependency>
      <groupId>dependency</groupId>
      <artifactId>antlr</artifactId>
      <version>2.7.7</version>
    </dependency>
    <dependency>
      <groupId>dependency</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.9.3</version>
    </dependency>
    <dependency>
      <groupId>dependency</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
    </dependency>
    <dependency>
      <groupId>dependency</groupId>
      <artifactId>jettison</artifactId>
      <version>1.3.8</version>
    </dependency>
  </dependencies>
</project>

Я думаю, это может ответить на ваш вопрос

person Vishnu Lakkimsetty    schedule 02.05.2018