Используйте класс из встроенного фляги в пользовательской задаче gradle - PullRequest
0 голосов
/ 23 июня 2019

Мой gradle-проект должен генерировать код для оставшегося процесса сборки.Инструментом, который должен генерировать код, является файл JAR, который также встроен в тот же проект Gradle.

Я хочу написать пользовательскую задачу, которая обрабатывает шаг генерации кода.Эта задача, очевидно, должна зависеть от создаваемого файла JAR, это достаточно просто.

Теперь я хочу получить доступ к классам из моего файла JAR в пользовательской задаче, и я просто не знаю, как сказать gradleчто класс Parser доступен из встроенного файла JAR.В следующем примере показано, что я хочу сделать в своей задаче:

task generateCode(dependsOn: ':dmlproject:build') {

    doLast {
        DmlParser parser = new DmlParser();
        parser.doStuff();
    }  
}

Gradle не знает, что класс DmlParser можно найти в jar-файле dmlproject, как я могу указать gradle, где его найти?Это вообще возможно?

Я понимаю, если это вообще не сработает, прежде чем я построю dmlproject хотя бы один раз, потому что без jar-файла нет и класса DmlParser.Но после первой сборки должно быть возможно заставить все работать, не так ли?

РЕДАКТИРОВАТЬ: Даже если я не могу ссылаться на классы в файле jar, который построен в том же проекте, яхотел бы узнать, как получить доступ к классам в jar-файле на диске или в классе, загруженном из репозитория maven.

1 Ответ

1 голос
/ 23 июня 2019

Оригинальный ответ

Если вам нужно написать сложную логику сборки для улучшения вашей сборки, вы не можете сделать это в основной сборке.Причина этого заключается в том, что Gradle необходимо настроить проект перед началом выполнения.Поэтому Gradle должен знать класс DmlParser в время конфигурации , но ваша сборка создает его во время выполнения.

Способ исправить это - ввести buildSrcпостроить .Это отдельная сборка внутри директории вашего проекта, которую вы можете использовать для реализации дополнительной сложной логики сборки.Просто создайте новый каталог с именем buildSrc внутри каталога проекта и переместите туда логику, которая создает DmlParser.Таким образом, вы можете использовать DmlParser в своей основной сборке.

Редактировать

Если вы хотите добавить банку, которая уже была построена, вам нужно использовать buildscript block , чтобы добавить jar в путь к классу сценария сборки:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
    }
}

Затем вы можете обратиться к классам, которые определены в jar-файлах, добавленных в путь к классам.

...