Gradle: опубликовать предварительно созданный jar в репозиторий Maven с зависимостями
В Stackru уже есть вопросы о публикации готовых jar-файлов в Maven из Gradle. Однако это немного отличается: как опубликовать предварительно созданный Jar-файл в репозиторий Maven и в то же время предоставить зависимости для включения в файл pom.xml?
У меня есть фляга, которая предварительно создается вне этого сценария. Мне нужно опубликовать этот jar в нашем репозитории Maven (Nexus) и указать зависимости в pom.xml. Мне удалось опубликовать предварительно созданный jar-файл в репозитории Maven, используя закрытие артефактов, но оно игнорирует закрытие зависимостей. Если я добавлю плагин java, то плагин Maven создаст pom с зависимостями, но загрузит jar-файл с нулевым байтом. Я предполагаю, что это связано с тем, что плагин Java рассчитывает компилировать и упаковать исходный код в каталог src, которого нет в этом проекте.
Есть ли способ, которым я могу "вставить" предварительно созданный Jar в процесс плагина Java, чтобы я мог загрузить jar вместе с зависимостями? Или я упускаю что-то еще, что очевидно?
Конечно, лучше всего было бы, если бы предварительно собранный процесс сборки Jar определял его зависимости и загружал в Maven, но, к сожалению, это стороннее программное обеспечение, и мы не имеем никакого контроля.
Ниже скрипт публикует файл jar с нулевым КБ...
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"
}
}
}
Большое спасибо! обкрадывать
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)
}
}
}
}
}
Сгенерированный пом будет выглядеть так, как показано ниже.
<?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>
Я думаю, что это может ответить на ваш вопрос