Невозможно определить что-либо в издательском блоке build.gradle - PullRequest
4 голосов
/ 22 мая 2019

Я пытаюсь создать библиотеку и опубликовать ее в maven local.Когда я начинаю пытаться добавить MavenPublication к publications, среда IDE выделяет его пунктирным подчеркиванием, как будто это неразрешенная ссылка.То же самое с параметрами, такими как from и artifact.

Если я раскомментирую блок pom, синхронизация 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.

1 Ответ

1 голос
/ 25 мая 2019

Поскольку это немного длинное объяснение, позвольте мне прояснить ситуацию здесь, вместо того, чтобы отвечать в комментариях на мой вопрос о предоставлении полного примера с блоком pom -offender.Как уже выяснил ОП, проблема в пропущенном знаке =.Это необходимо для pom.organization и не должно присутствовать в plugin.id.

Для блока plugins, это хорошо известное Groovy соглашение о вызове метода , которое позволяет намопустить скобки.И здесь вы не можете использовать присваивание, потому что id не является свойством класса.Посмотрите на исходный код Gradle для блока плагинов .

Однако, если мы посмотрим на pom.organization block , мы увидим получатель Action MavenPomOrganization , в котором getName() и getUrl() возвращают Property<String> и не принимают никаких аргументов.С голой точки зрения Groovy, это не случай опущения скобок.Но я не знаю наверняка, как синтаксис присваивания (name = 'MyOrg') работает здесь под капотом.На первый взгляд я могу только предположить, что это какая-то магия Gradle, использующая магию Groovy, например, преобразование AST или что-то еще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...