我正在尝试创建一个库并将其发布到本地Maven。当我开始尝试向MavenPublication
添加publications
时,IDE会给它加上一个虚线下划线,就像它是一个未解决的引用一样。与from
和artifact
之类的参数相同。
如果我取消注释pom
块,则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。
答案 0 :(得分:1)
由于它的解释有点长,所以让我澄清一下这里的情况,而不是在评论中回答我的问题,即提供带有pom
-offer块的完整示例。正如OP已经弄清楚的那样,问题出在丢失的=
符号中。 pom.organization
是必需的,并且不能出现在plugin.id
中。
对于plugins
块,这是一个众所周知的Groovy convention of method call,它允许我们省略括号。而且您不能在此处使用赋值,因为id
不是类的属性。查看plugins block的Gradle源代码。
但是,如果我们查看pom.organization block,我们会看到Action的接收者是MavenPomOrganization,其中getName()
和getUrl()
返回Property<String>
并且不接受任何争论。从Groovy的立场来看,绝对不是省略括号的情况。但是我不确定分配语法(name = 'MyOrg'
)在这里是如何工作的。乍一看,我可以推测这是使用Groovy魔术的某种Gradle魔术,例如AST转换之类的东西