Gradle пользовательский плагин jar с зависимостями - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь создать банку для пользовательского подключаемого модуля Gradle, который будет использоваться другими проектами Gradle. Я использую Java, чтобы написать плагин. У меня проблема, включая зависимости в банке. Если я построю банку, используя ниже build.gradle

plugins {
    id 'groovy'
}

repositories{
    mavenCentral()
}

dependencies {
    compile gradleApi()
    compile localGroovy()
    compile 'com.google.guava:guava:27.0-jre'
    testCompile 'junit:junit:4.12'
    //compile 'org.apache.commons:commons-lang3:3.8.1'
}

group = 'com.mine'
version = '1.0'

Я получаю исключение NoClassDefFound для классов гуавы при применении плагина к проекту. Если я включу задачу по созданию jar с зависимостями, как показано ниже, в build.gradle

jar {
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it)}
    }
}

Там написано Plugin with Id 'my-plugin' not found. Как включить зависимости в банку подключаемого модуля Gradle?

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Извините, что добавил это как ответ, но у меня недостаточно очков, чтобы комментировать (да, это немного поздно, но я нашел это в поиске, и это было так близко, может быть, это поможет кому-то еще).

Ответ @ M.Ricciuti правильный, просто отсутствует один файл, а именно файл settings.gradle в каталоге проекта ссылки (а не плагина):

pluginManagement {
    repositories {
        maven {
            url '../repos/maven-repo'
        }
        gradlePluginPortal()
        ivy {
            url '../repos/ivy-repo'
    }
}

}

Большое спасибо, я пробовал много вещей, которые не работали, прежде чем найти это, даже примеры от gradle не работали (или, скорее всего, я не выполнил их правильно). Во всяком случае, я слил то, что увидел в ответах, с ответом М. Ричути и увидел этот файл в образце.

Мой полный проект на https://github.com/reddierocket/sampleGradlePlugin В файле readme есть инструкции по его запуску. (Обратите внимание, что я не включил обертку, но я использую версию Gradle 5.3.1.)

0 голосов
/ 09 ноября 2018

Ваш проект плагина должен быть настроен как автономный проект плагина, а затем опубликован в репозитории maven, что сделает работу по разрешению зависимостей; есть хорошая документация по написанию пользовательского плагина здесь , особенно следующая часть: с использованием плагина разработки плагина Gradle

Существует также хороший пример написания / публикации / использования пользовательского плагина в примерах Gradle: https://github.com/gradle/gradle/tree/master/subprojects/docs/src/samples/plugins (см. Два подпроекта publishing и consuming)

А вот рабочий пример с плагином, который зависит от внешней библиотеки (например, commons-lang):

Плагин проекта

build.gradle

plugins {
    id 'java-gradle-plugin'
    id 'groovy'
    id 'maven-publish'
}
group 'org.gradle.sample.plugin'
version '0.1'

//  pugin metadata configuration
gradlePlugin {
    plugins {
        myplugin {
            id = "org.gradle.sample.plugin.myplugin"
            implementationClass = "org.gradle.sample.plugin.MyPlugin"
        }
    }
}
// publish to local maven repo for testing
publishing {
    repositories {
        maven {
            url "../repos/maven-repo"
        }
    }
}
//  repo for dependences resolution
repositories{
    jcenter()
}

// dependencies of this plugin 
dependencies {
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
}

Реализация плагина : src/main/groovy/org/gradle/sample/plugin/MyPLugin.groovy

package org.gradle.sample.plugin

import org.apache.commons.lang3.StringUtils
import org.gradle.api.Plugin
import org.gradle.api.Project

class MyPlugin implements Plugin<Project> {
    @Override
    void apply(final Project project) {
        println "Applying custom plugin... "
        project.tasks.create('testPlugin'){
            doLast{
                println " custom plugin task executing."
                println "Result: " + StringUtils.capitalize("stringtotest")
            }
        }
    }
}

Постройте и опубликуйте этот плагин ./gradlew publish: банку плагина и «артефакты маркера плагина» будут опубликованы в локальном репозитории maven в .. / repos / maven-repo

Потребительский проект

build.gradle

plugins {
    id 'java'
    // import/apply your custom plugin
    id 'org.gradle.sample.plugin.myplugin' version '0.1'
}

group 'org.gradle.sample.plugin'
version '0.1'

repositories{
    maven {
        url "../repos/maven-repo"
     }
    jcenter()
}

Чтобы протестировать плагин, попробуйте выполнить задачу плагина testPlugin

> Task :testPlugin
 custom plugin task executing. 
 Result: Stringtotest
...