因此,如果我在Maven中构建一个jar,例如jackson-core-2.5.1.jar
,我会在工件中找到以下内容:
META-INF/maven/
META-INF/maven/com.fasterxml.jackson.core/
META-INF/maven/com.fasterxml.jackson.core/jackson-core/
META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties
META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml
然而,Gradle似乎没有创建这些数据。问题是我们有几个构建组件,包括父项目,它们不在同一个SCM位置。对于我们庞大而复杂的构建,如果没有元数据,Gradle将如何知道一个SCM位置中的本地构建工件依赖于另一个SCM位置中的本地构建工件? Gradle管理这种情况的方法是什么?
答案 0 :(得分:2)
存储库包含pom.xml
的单独副本。它通常位于磁盘上物理结构中的JAR文件旁边。这适用于Nexus或Artifatory等二进制存储库,也适用于本地Maven存储库($HOME/.m2/repo
下)。
如果出于某种原因想要复制Maven的行为,可以告诉Gradle创建这些文件。我们在subprojects
闭包中使用此自定义来配置我们的多项目Gradle构建。
jar {
// until we have better solution
// https://discuss.gradle.org/t/jar-task-does-not-see-dependency-when-using-maven-publish/11091
if (project.tasks.findByName('generatePomFileForMavenJavaPublication')) {
dependsOn 'generatePomFileForMavenJavaPublication'
} else {
project.tasks.whenTaskAdded { addedTask ->
if (addedTask.name == 'generatePomFileForMavenJavaPublication') {
project.tasks.jar.dependsOn 'generatePomFileForMavenJavaPublication'
}
}
}
into("META-INF/maven/$project.group/$project.archivesBaseName") {
/*
from generatePomFileForMavenJavaPublication
*/
from new File(project.buildDir, 'publications/mavenJava')
rename ".*", "pom.xml"
}
}
如果有时候懒惰地创建generatePomFileForMavenJavaPublication
任务没有问题会更简单。您需要检查如何创建属性文件。我猜你可以从那里运行Gradle进程转储属性。