2016-09-11 2 views
0

Обратите внимание, что на этот вопрос может быть частично дан ответ, решая конкретную проблему, но также решается решение общей проблемы.Неисправность buildscript Gradle не найдена

Конкретная проблема

Мне нужно передать параметры командной строки для Gradle коды. У Gradle нет разумного способа сделать это, поэтому мне нужно как-то их извлечь из System свойств, а затем проанализировать их. Я пытался использовать пакет org.apache.common.cli. Но я не могу импортировать его в код сборки.

Это примерно то, что он выглядит следующим образом:

buildscript { 
    repositories { ... } 
    dependencies { 
     classpath group: "commons-cli", name: "commons-cli", version: "1.2" 
    } 
} 
... 
org.apache.commons.cli.DefaultParser 

И я получаю это:

* What went wrong: 
Could not compile build file 'somewhere/build.gradle'. 
> startup failed: 
    build file 'somewhere/build.gradle': 35: unable to resolve class org.apache.commons.cli.DefaultParser 
    @ line 35, column 1. 
    import org.apache.commons.cli.DefaultParser 

Я понятия не имею, что пошло не так или, как отладить это. Я также пробовал Groovy's groovy.util.CliBuilder, но это ломается с еще более загадочными ошибками.

Итак, чтобы решить мою непосредственную проблему: я был бы рад найти простой способ проанализировать аргументы командной строки, переданные в сборку Gradle.

Generic проблема

Есть ли способ отладки Gradle код? Отладка Я не имею в виду добавить аргумент --debug в его параметры командной строки. Он просто печатает тонны бессмысленной глупости, но ничего не говорит о том, что он пытался сделать, и что пошло не так. Я имею в виду что-то вроде фактического отладчика.

Есть ли способ узнать, какие зависимости он пытался загрузить, и удавалось ли им загружать их, и если да, откуда они их загружали?

Есть ли способ перевести язык «Грейдл» во что-то, что можно проанализировать с помощью linter/editor s.t. можно было бы знать, в каких частях он делает/если имеет смысл добавлять другие части определенного вида (что я имею в виду - это какой-то интеллект, чтобы облегчить понимание проблем, таких как неудовлетворительные зависимости)?

+0

Что вы подразумеваете, нет разумного способа передать параметры командной строки? Вы пытались использовать опцию '-P'? См. Https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_properties_and_system_properties – RaGe

+0

@RaGe (a) Это хромает по сравнению с любой библиотекой, которая выполняет разбор командной строки (вы хотите иметь возможность добавлять описание опции командной строки, наличие групп опций, автоматическое создание ошибок, если аргументы не соответствуют вашему формату и т. д.). (b) Это невозможно использовать на базовом уровне (эти ошибки, если вы не определяете соответствующее свойство проекта, это недоступно для ваших классов в области определения). – wvxvw

+0

Вы имеете в виду тип помощи, которую вы получаете при запуске 'gradle tasks'? Просто чтобы исключить, что это не случай проблемы [XY] (http://xyproblem.info/), можете ли вы описать, что именно вы пытаетесь сделать, анализируя аргументы командной строки? – RaGe

ответ

1

Этот пост задает несколько вопросов и очень субъективен (re: «не имеет никакого разумного пути»). Я сделаю все, что смогу.

Во-первых, в качестве проверки вменяемости для buildscript, давайте попробуем Apache Commons Lang3:

import org.apache.commons.lang3.StringUtils 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath group: 'org.apache.commons', name: 'commons-lang3', version: '3.4' 
    } 
} 

println "TRACER : " + StringUtils.class.simpleName 

Данный скрипт работает, но с Gradle 2.14.1, я могу подтвердить, что DefaultParser из Apache Commons CLI 1.3.1 (как в сторону, это не в v 1.2) не работает. Я подозреваю, что это связано с this bug. Ссылка упоминает dom4j, но может случиться так, что cli в той же категории.

Что касается аргументов командной строки, то в документации Gradle приводятся примеры использования -P, -D, gradle.properties и так далее. Если у вас есть определенная проблема синтаксического анализа, создайте новый вопрос со спецификой.

Что касается зависимостей, следующие команды могут быть использованы:

gradle dependencies 
gradle buildEnvironment 

см this post для последнего.

+0

К счастью, я не знаю, работает ли это или нет. Но для потомков и тех, кто столкнется с этой проблемой в будущем: как вы знаете, какие правильные слова писать в блоке «зависимости»? Как вы узнали, что это «org.apapche.commons», а не «apache-commons» или любой другой вариант? Что все это означает? В руководстве нечего сказать об этом, он дает только случайные примеры, которые сильно различаются в зависимости от месяца, в котором они публикуются, и, возможно, других факторов, которые не являются на первый взгляд. – wvxvw

+1

The Gradle doc охватывает это, хотя он может предполагать знакомство с координатами Maven. Вы несправедливо обвиняете Gradle в отсутствии собственного опыта работы с JVM. Спецификация зависимостей для Apache Commons Lang3 исходила из этой ссылки (см. Вкладку Gradle) - https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.4 –

+0

Я голосую, чтобы закрыть этот вопрос, потому что это действительно неясно. –

Смежные вопросы