Неизвестное свойство автономного плагина Gradle при загрузке из репозитория github - PullRequest
0 голосов
/ 27 октября 2018

Я создал простой автономный плагин Gradle на Java и репозиторий Maven на GitHub для публикации плагина.Все работает отлично, кроме получения свойств проекта, которые должны быть доступны с плагином.Когда я применяю плагин в другом проекте Gradle, он не может найти эти свойства.

Это происходит только тогда, когда плагин загружается из удаленного репозитория на GitHub.При загрузке из локального репозитория все работает.Можно ли каким-то образом настроить реализацию плагина для предоставления свойств даже из удаленного репозитория?Или это какая-то особенность GitHub, которую нельзя взломать?

Подробности следуют:

Мой build.gradle в другом проекте выглядит примерно так:

buildscript {
    repositories {
        maven {
            url "GITHUB_REPO_URL"
        }
    }

    dependencies {
        classpath "custom_plugin_group:custom_plugin:1.0"
    }
}

apply plugin: "custom_plugin"

task propertyTest {
    doLast {
        println project.customProperty
    }
}

Когда я пытаюсь запустить задачу propertyTest , он терпит неудачу с жалобой на то, что «Не удалось получить неизвестное свойство« customProperty »для корневого проекта« another_project »типа org.gradle.api.Project. "

Я создаю свойство в методе apply в основном классе плагина.Я попробовал следующие три подхода:

// First approach - adding a simple value to extensions
public class CustomPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {            
        project.getExtensions().add("customProperty", "Custom property value");
    }
}
// Second approach - setting extra property to extensions
public class CustomPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {            
        project.getExtensions().getExtraProperties().set("customProperty", "Custom property value");
    }
}
// Third approach - adding a property instance to extensions
public class CustomPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {            
        Property<String> customProperty = project.getObjects().property(String.class);
        customProperty.set("Custom property value");
        project.getExtensions().add("customProperty ", customProperty);
    }
}

1 Ответ

0 голосов
/ 28 октября 2018

Для создания расширений для вашего плагина Gradle вам нужно создать класс POJO с полями:

class YourExtension {
  String customProperty
}

И затем создать расширение в вашем классе плагина:

public class CustomPlugin implements Plugin<Project> {

  @Override
  public void apply(Project project) {
    project.getExtensions().create("extensionName", YourExtension.class);
  }
}

Теперь вы можете использовать расширениев build.gradle файле:

extensionName {
    customProperty = "value"
}
...