Gradle プロジェクトがあり、そのすべての依存関係を転送して別の Maven プロジェクトで使用する必要があります。つまり、build.gradle から pom.xml をどのように生成 (または生成) できますか?
4 に答える
Gradle 7 以降、Gradle の Maven-Publish pluginを使用すると、publishToMavenLocalとpublishが自動的にタスクに追加され、いずれかを呼び出すと常に POM ファイルが生成されます。
したがって、build.gradleファイルが次のようになっている場合:
plugins {
id 'java'
id 'maven-publish'
}
repositories {
mavenCentral()
}
dependencies {
implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
runtimeOnly group: 'ch.qos.logback', name:'logback-classic', version:'1.2.3'
testImplementation group: 'junit', name: 'junit', version: '4.12'
}
// the GAV of the generated POM can be set here
publishing {
publications {
maven(MavenPublication) {
groupId = 'edu.bbte.gradleex.mavenplugin'
artifactId = 'gradleex-mavenplugin'
version = '1.0.0-SNAPSHOT'
from components.java
}
}
}
gradle publishToLocalRepo
そのフォルダーで呼び出すことができます。build/publications/mavenサブフォルダーにpom-default.xmlというファイルがあります。また、ビルドされた JAR と POM は、Maven ローカル リポジトリにあります。より正確にはgradle generatePomFileForMavenPublication
、Maven ローカル リポジトリへの公開を省略したい場合は、タスクが実際の生成を行います。
Gradle の「構成」が Maven の「スコープ」と常に 1 対 1 で対応するとは限らないため、すべての依存関係がここに表示されるわけではないことに注意してください。
ローカルリポジトリに何もインストールしたくなかったので、ドキュメントを読んだ後、代わりに次のようにしました。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
@無名の馬
groovy で作成された gradle は、} プロジェクト ブロックの終了後に追加を試みることができます
build{
plugins{
plugin{
groupId 'org.apache.maven.plugins'
artifactId 'maven-compiler-plugin'
configuration{
source '1.8'
target '1.8'
}
}
}
}
試していませんでした。
Gradleがインストールされていない場合、「これを行うためのgradleタスクの書き込み」はあまり役に立ちません。この 100MB の獣を依存関係とともにインストールする代わりに、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 の残りの部分は手動で作成する必要があります。
最も組み込みのソリューションは、ビルド ディレクトリのフォルダーにarchiveTask
pom を生成する Maven プラグインのタスクを使用することです。http://www.gradle.org/docs/current/userguide/maven_plugin.html#sec:maven_pom_generationpoms