我正在尝试创建一个库并将其发布到本地 Maven。当我开始尝试添加 MavenPublication
至publications
,IDE 给它一个虚线下划线,就像它是一个未解析的引用一样。与 from
等参数相同和 artifact
.
如果我取消注释 pom
block ,gradle 同步失败并说 Cause: invalid type code: B3
, 最终是因为 org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException
在其中的一个参数上。
这个 build.gradle 文件在我的一个模块中。顶层 build.gradle 非常简单。
buildscript {
repositories {
mavenLocal()
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
jcenter()
}
dependencies {
}
}
allprojects {
apply plugin: "idea"
group = 'com.mygroup'
version = '1.0.0'
repositories {
mavenLocal()
mavenCentral()
jcenter()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven { url "https://oss.sonatype.org/content/repositories/releases/" }
}
}
这是模块的 build.gradle。
plugins {
id 'java-library'
id 'maven-publish'
id 'signing'
}
task sourcesJar(type: Jar) {
from sourceSets.main.allJava
archiveClassifier = 'sources'
}
task javadocJar(type: Jar) {
from javadoc
archiveClassifier = 'javadoc'
}
publishing {
publications {
mavenJava(MavenPublication) {
artifactId = 'mylibrary'
from components.java
artifact sourcesJar
artifact javadocJar
pom {
name = 'MyLibrary'
organization {
name 'MyOrg'
url 'www.myurl.com'
}
}
}
}
}
signing {
sign publishing.publications.mavenJava
}
javadoc {
if(JavaVersion.current().isJava9Compatible()) {
options.addBooleanOption('html5', true)
}
}
我正在使用 Gradle 5.1.1、IntelliJ Idea 2019.1.2 和 JDK 12.0.1。
最佳答案
由于解释有点长,让我在这里澄清一下情况,而不是在评论中回复我关于提供完整示例的问题 pom
-罪犯 block 。正如 OP 已经发现的那样,问题在于缺少 =
符号。 pom.organization
是必需的并且不得出现在 plugin.id
中.
对于 plugins
block ,这是一个众所周知的Groovy convention of method call ,这允许我们省略括号。而且你不能在这里使用赋值,因为 id
不是类的属性。查看 plugins block 的 Gradle 源代码.
但是,如果我们查看 pom.organization block我们看到 Action 的接收者是 MavenPomOrganization其中有 getName()
和 getUrl()
返回 Property<String>
并且不接受任何争论。从纯 Groovy 的角度来看,这绝对不是省略括号的情况。但我不确定赋值语法( name = 'MyOrg'
)如何在幕后工作。乍一看,我可以推测这是某种使用 Groovy 魔法的 Gradle 魔法,例如AST转换什么的
关于maven - 无法在 build.gradle 的发布 block 中定义任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56248477/