我想用IntelliJ / Gradle生成一个内置pom.xml
的jar,以便在另一个项目中使用它。
我为build.gradle
尝试了以下代码:
group 'com.test'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'maven-publish'
sourceCompatibility = 1.5
repositories {
mavenCentral()
}
jar {
into("META-INF/maven/$project.group/$project.name") {
from generatePomFileForMavenJavaPublication
rename ".*", "pom.xml"
}
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile group: 'postgresql', name: 'postgresql', version: '9.1-901.jdbc4'
}
但是我收到了以下错误:
'jar' cannot be applied to '(groovy.lang.closure <org.gradle.api.tasks.bundling.AbstractArchiveTask> )'
gradle说:
Could not find property 'generatePomFileForMavenJavaPublication' on
task ':jar'.
或者有人知道另一种方法吗?
答案 0 :(得分:1)
from
需要文件或路径。你喂它的是什么,generatePomFileForMavenJavaPublication
是一项任务,绝对不是文件或路径,因此不会起作用。
你可以做的是让generatePomFileForMavenJavaPublication
成为jar
的先决条件,然后拿起它在你的构建目录中创建的pom。
以下内容应该可以做到这一点:
jar {
dependsOn generatePomFileForMavenJavaPublication
from("$builddir/pom.xml") //Or whatever path it goes to in the generate task.
into("META-INF/maven/$project.group/$project.name")
}
答案 1 :(得分:0)
任务generatePomFileForMavenJavaPublication
是在配置阶段后期创建的。您必须通过在from语句中将任务指定为Closure
返回类型来推迟创建对任务的引用。
apply plugin: 'maven-publish'
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
jar {
into("META-INF/maven/$project.group/$project.name") {
from { generatePomFileForMavenJavaPublication }
rename ".*", "pom.xml"
}
}
来自Github
答案 2 :(得分:-1)
我刚发现pom.xml
不必在jar内。
当我发布到Maven Local(而不是Maven Central)时,它会起作用:
group 'ch.test'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'maven-publish'
sourceCompatibility = 1.5
repositories {
mavenLocal()
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile group: 'postgresql', name: 'postgresql', version: '9.1-901.jdbc4'
}