我想用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'.
或者有人知道另一种方法?
任务 generatePomFileForMavenJavaPublication
是在配置阶段晚期创建的。您将必须通过将任务分配为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
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")
}
我刚刚发现pom.xml
不必在罐子内。
当我发布到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'
}