Как решить NoClassDefFoundError в сборке пользовательского плагина gradle? - PullRequest
0 голосов
/ 10 сентября 2018

Я создаю собственный плагин Gradle.При создании плагина с Gradle выдается ошибка NoClassDefFoundError:

[...]
Caused by: java.lang.reflect.InvocationTargetException
        at org.gradle.plugin.devel.tasks.ValidateTaskProperties$1.visitFile(ValidateTaskProperties.java:181)
        ... 54 more
Caused by: org.gradle.internal.impldep.com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: com/example/I18nBoundaryException
        at org.gradle.internal.impldep.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2199)
        at org.gradle.internal.impldep.com.google.common.cache.LocalCache.get(LocalCache.java:3934)
        at org.gradle.internal.impldep.com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938)
        at org.gradle.internal.impldep.com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821)
        at org.gradle.internal.impldep.com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827)
        at org.gradle.api.internal.tasks.properties.DefaultPropertyMetadataStore.getTypeMetadata(DefaultPropertyMetadataStore.java:152)
        at org.gradle.api.internal.tasks.properties.PropertyValidationAccess$BeanTypeNodeFactory.createRootNode(PropertyValidationAccess.java:86)
        at org.gradle.api.internal.tasks.properties.PropertyValidationAccess.collectTaskValidationProblems(PropertyValidationAccess.java:69)
        ... 55 more
Caused by: java.lang.NoClassDefFoundError: com/example/I18nBoundaryException
        at org.gradle.api.internal.tasks.properties.DefaultPropertyMetadataStore.getFields(DefaultPropertyMetadataStore.java:281)
        at org.gradle.api.internal.tasks.properties.DefaultPropertyMetadataStore.access$100(DefaultPropertyMetadataStore.java:81)
        at org.gradle.api.internal.tasks.properties.DefaultPropertyMetadataStore$3.visitType(DefaultPropertyMetadataStore.java:164)
        at org.gradle.internal.reflect.Types.walkTypeHierarchy(Types.java:58)
        at org.gradle.api.internal.tasks.properties.DefaultPropertyMetadataStore.createTypeMetadata(DefaultPropertyMetadataStore.java:158)
        at org.gradle.api.internal.tasks.properties.DefaultPropertyMetadataStore.access$000(DefaultPropertyMetadataStore.java:81)
        at org.gradle.api.internal.tasks.properties.DefaultPropertyMetadataStore$1.load(DefaultPropertyMetadataStore.java:114)
        at org.gradle.api.internal.tasks.properties.DefaultPropertyMetadataStore$1.load(DefaultPropertyMetadataStore.java:111)
        at org.gradle.internal.impldep.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524)
        at org.gradle.internal.impldep.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317)
        at org.gradle.internal.impldep.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280)
        at org.gradle.internal.impldep.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195)
        ... 62 more

I18nBoundaryException - это пользовательское исключение, определенное в другом модуле IntelliJ в том же проекте, поэтому я считаю, что проблема заключается в том, чтобы включить класс вclasspath плагина.

Мой build.gradle файл выглядит следующим образом:

apply plugin: "java-gradle-plugin"
apply plugin: "groovy"

gradlePlugin {
    plugins {
        i18nGradlePlugin {
            id = 'i18n-gradle-plugin'
            implementationClass = 'com.example.I18nPlugin'
        }
    }
}

dependencies {
    compile gradleApi()
    compile project(":library")

    compileOnly libraries.lombok

    testCompile libraries.junit
    testCompile gradleTestKit()
}

Класс исключения определен в :library.Сборка кода через Intellij, а не через gradle, работает.

Как включить необходимые зависимости в classpath?

Обновление: Проблема также возникает при сборкеПлагин Maven.И jar плагина, и jar библиотеки загружаются в репозиторий, где maven может его найти.В репозитории есть файл pom, который дает понять, что library.jar является зависимостью плагина maven.

...