Как избежать извлечения исходного jar из зависимости flatDir с помощью Gradle

#gradle

#gradle

Вопрос:

У меня есть скрипт сборки Gradle со смешанными зависимостями Maven (я использую Maven Central для разрешения зависимостей) и локальный каталог. Фрагмент выглядит следующим образом:

 repositories {
    mavenCentral()

    flatDir name: 'directoryRepository', dirs: 'tools/libs'
}
  

Затем мне нужно объявить мои локальные зависимости таким образом:

 dependencies {
    compile ":commons-cli:1.0@jar"
}
  

Я не могу использовать обозначения files (‘…’) (потому что другие части скрипта завершились бы ошибкой с исключением приведения класса из Array в HashMap, и я не могу изменить эту часть).

Файлы jar правильно добавлены в путь сборки. Проблема в том, что Gradle хочет извлекать для каждого jar в ‘tools / libs’ другой ‘-source’ jar. Действительно, если у меня есть в папке tools / libs:

 commons-cli-1.0.jar
commons-cli-1.0-sources.jar
  

все работает нормально. Если я удаляю исходный jar, он выдает ошибку «невозможно разрешить зависимость», извлекая -source jar.

У меня есть более 50 файлов, которыми можно управлять таким образом, и, конечно, у меня нет исходных файлов jar (и мне не интересно их иметь).

Как я могу исключить выборку исходного jar?

Заранее большое спасибо за любые подсказки.

Fabio Da Soghe

Ответ №1:

Если вы используете IDEA, есть настройка для всего модуля ideaModule.downloadSources = false , которая может помочь, но она отключит всю загрузку исходного кода для IDEA.

Не уверен, что вы имели в виду под files(...) обозначением, но как насчет того, чтобы попробовать это?:

 dependencies{
  ...
  compile fileTree( dir: "toos/lib", include: '*.jar' )
  ... or ...
  compile fileTree( dir: "toos/lib", includes: ['*.jar'] )
}
  

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

Похоже, существует связанный с ним отчет об ошибке, исправленный в milestone 5. Попытка показала, что ошибка все еще существует, но теперь это просто предупреждение, и сборка завершится успешно. По-видимому, предупреждение исходит от Ivy, поэтому его нелегко исправить : (

Комментарии:

1. Под files (…) я имел в виду то, что вы написали: я не могу использовать files (…) или FileTree (…), потому что это создает массив, который вызывает ClassCastException в последующем коде. И я не могу это изменить. В любом случае, я использую Eclipse. Ваш намек предлагает мне выполнить поиск в плагине Eclpse, хотя для меня это звучит странно: почему Gradle должен беспокоиться о IDE, которую я использую? Концепция загрузки исходного кода должна быть независимой от конкретной используемой IDE, не так ли?

2. Найден эквивалент для плагина Eclipse: eclipseClasspath.downloadSources = false Принимаю ваш ответ за то, что он указал мне правильное направление (я искал настройки уровня зависимости, которые, похоже, не существуют).

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

4. Это было бы здорово : o) Я действительно много искал и нашел что угодно, но я должен сказать, что я немного туповат с Groovy…