maven - 无法在 build.gradle 的发布 block 中定义任何内容

标签 maven gradle intellij-idea groovy

我正在尝试创建一个库并将其发布到本地 Maven。当我开始尝试添加 MavenPublicationpublications ,IDE 给它一个虚线下划线,就像它是一个未解析的引用一样。与 from 等参数相同和 artifact .

如果我取消注释 pom block ,gradle 同步失败并说 Cause: invalid type code: B3 , 最终是因为 org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException在其中的一个参数上。

IntelliJ Idea screen shot

这个 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/

相关文章:

java - 在 Spring Boot 1.5 中使应用程序既独立又依赖

java - 如何使用基本 Gradle 项目正确引用资源?

android-studio - 创建新项目时无法解析Symbol R

spring-boot - 通过 IntelliJ 运行 Spring Boot Application.main() 找不到我的本地配置文件

java - 缺少 SWT 依赖 Artifact ?

Maven PDF 不包含站点信息

java - Spring Boot 应用程序 : Not picking up application. 属性?

java - 如何迭代 cucumber 的特征文件

java - 使用 File.listFiles() 时出现 IntelliJ "may cause NullPointerException"警告

intellij-idea - IntelliJ 是否有内部 Web 服务器来提供 Web 应用程序的静态内容?