У меня есть проект Gradle, и мне нужно, чтобы все его зависимости были переданы и использованы с другим проектом Maven. Другими словами, как я могу сгенерировать (или я могу сгенерировать) pom.xml из build.gradle?
Gradle build. Gradle в Maven pom.xml
Ответ 1
Самое встроенное решение, скорее всего, будет использовать задачу archiveTask
в Maven Plugin, которая будет генерировать pom в папке poms
в вашем каталоге dir. http://www.gradle.org/docs/current/userguide/maven_plugin.html#sec:maven_pom_generation
Ответ 2
При использовании Gradle плагина Maven задача установки автоматически добавляется к вашим задачам, и вызов ее всегда будет генерировать POM файл.
Итак, если ваш файл build.gradle выглядит так:
apply plugin: 'java'
apply plugin: 'maven'
group = 'myGroup'
// artifactId is taken by default, from folder name
version = '0.1-SNAPSHOT'
dependencies {
compile 'commons-lang:commons-lang:2.3'
}
вы можете вызвать gradle install
в своей папке, вы найдете в подпапке build/poms файл pom-default.xml, который будет содержать зависимости. Кроме того, встроенный JAR вместе с POM будет в вашем локальном репо Maven.
Ответ 3
Поскольку я не хотел ничего устанавливать в своем локальном репо, я делал следующее, а не после чтения документов. Добавьте в свой build.gradle
apply plugin: 'maven'
group = 'com.company.root'
// artifactId is taken by default, from folder name
version = '0.0.1-SNAPSHOT'
task writeNewPom << {
pom {
project {
inceptionYear '2014'
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
}
}.writeTo("pom.xml")
}
чтобы запустить его gradle writeNewPom
@a_horse_with_no_name
gradle, сделанный с помощью groovy, может попытаться добавить после завершения} блок проекта
build{
plugins{
plugin{
groupId 'org.apache.maven.plugins'
artifactId 'maven-compiler-plugin'
configuration{
source '1.8'
target '1.8'
}
}
}
}
не пытался, дикая догадка!
Ответ 4
Если у вас не установлен gradle, "задача записи gradle для этого" не очень полезна. Вместо установки этого 100-мегабайтного зверя с зависимостями я сделал фильтр, преобразующий зависимости gradle в зависимости maven:
cat build.gradle\
| awk '{$1=$1};1'\
| grep -i "compile "\
| sed -e "s/^compile //Ig" -e "s/^testCompile //Ig"\
| sed -e "s/\/\/.*//g"\
| sed -e "s/files(.*//g"\
| grep -v ^$\
| tr -d "'"\
| sed -e "s/\([-_[:alnum:]\.]*\):\([-_[:alnum:]\.]*\):\([-+_[:alnum:]\.]*\)/<dependency>\n\t<groupId>\1<\/groupId>\n\t<artifactId>\2<\/artifactId>\n\t<version>\3<\/version>\n<\/dependency>/g"
Это преобразует
compile 'org.slf4j:slf4j-api:1.7.+'
compile 'ch.qos.logback:logback-classic:1.1.+'
compile 'commons-cli:commons-cli:1.3'
в
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.+</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.+</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.3</version>
</dependency>
Остальная часть pom.xml должна быть создана вручную.