Gradle: Сделать стороннюю банку доступной для локального хранилища Gradle - PullRequest
44 голосов
/ 04 апреля 2010

В настоящее время я тестирую Gradle как альтернативу Maven. В моих проектах есть несколько сторонних jar-файлов, которых нет ни в одном (Maven) репозиториях. Моя проблема сейчас в том, как мне удалось установить эти jar-файлы в мой локальный репозиторий .gradle. (Если это возможно, я не хочу использовать локальный репозиторий Maven, потому что Gradle должен работать независимо.) В настоящий момент я получаю много исключений из-за отсутствия jar-файлов. В Maven это довольно просто, запустив команду установки. Тем не менее, мой поиск в Google для чего-то похожего на команду установки Maven не был успешным. У кого-нибудь есть идея?

Ответы [ 6 ]

38 голосов
/ 18 октября 2010

Вы можете включить зависимости JAR вашей файловой системы как:

dependencies {
    runtime files('libs/a.jar', 'libs/b.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}

вы можете изменить время выполнения для compile / testCompile / etc ..

10 голосов
/ 30 ноября 2011

Более полный ответ был дан Адамом Мердоком в списке рассылки на http://gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local-gradle-repository-td1431953.html

По состоянию на апрель 2010 года не было простого способа добавить новый jarfile в ваш репозиторий ~ / .gradle. В настоящее время выясняется, изменилось ли это.

По состоянию на октябрь 2014 года, это все еще так - поскольку gradle делает контрольную сумму md5 вашего jarfile, вы не можете просто скачать его и поместить в каталог в .gradle / caches, а gradle - нет, Насколько я могу судить, есть задачи, которые позволяют вам взять локальный файл и поместить его в кеш.

8 голосов
/ 23 ноября 2012

Используется опция (1) из поста Адама Мердока (уже связанного выше: http://gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local-gradle-repository-td1431953.html) с gradle-1.3, и она работает просто замечательно!

Вот его комментарий:

  1. Скопируйте файлы jar в локальный каталог и используйте репозиторий flatDir (), чтобы использовать их оттуда. Например, вы можете скопировать их в $ projectDir / lib и в вашем файле сборки выполните:

репозитории { flatDir (dirs: 'lib')}

Файлы в каталоге lib должны соответствовать схеме именования: name-version-classifier.extension, где версия и классификатор необязательный. Так, например, вы можете назвать их groovy-1.7.0.jar или даже groovy.jar

Затем вы просто объявляете зависимости как обычно:

зависимости { compile 'groovy: groovy: 1.7.0'}

В одном репозитории flatDir () немного больше подробностей: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sec:flat_dir_resolver

  1. Аналогично приведенному выше, но с использованием средства распознавания плюща вместо flatDir (). Это почти то же самое, что и выше, но позволяет намного больше вариантов, насколько наименования и местоположения идут.

Там есть некоторые детали: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sub:more_about_ivy_resolvers

  1. Не беспокойтесь об объявлении зависимостей. Просто скопируйте jar-файлы в локальный каталог и добавьте файловую зависимость. Например, если банки находятся в $ projectDir / lib:

зависимости { compile fileTree ('lib') // это включает в себя все файлы в разделе 'lib' в пути к классам компиляции}

Подробнее на: http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#N12EAD

  1. Используйте maven install для установки зависимостей в локальный кэш maven и используйте maven кеш в качестве хранилища:

хранилища { mavenRepo (urls: новый файл (System.properties ['user.home'], '.m2 / repository'). toURI (). toURL ())}

3 голосов
/ 02 июня 2011

Короче говоря: развернуть в диспетчере хранилища. Может локально, по локальной сети компании.

Совсем другой способ решения проблемы такого типа, особенно если это часто случается, заключается в использовании менеджера хранилища. Есть несколько отличных вариантов с открытым исходным кодом, таких как Artifactory, Nexus или Archiva.

Предположим, у вас есть файл jar из какого-то сомнительного источника, который должен быть включен в вашу сборку, пока у вас не появится возможность его рефакторинга. Менеджер репозитория позволит вам загрузить файл в свой собственный репозиторий, так как, в этом примере, dubious-origin-UNKNOWN.jar

Тогда ваш build.gradle будет выглядеть примерно так:

repositories {
    mavenRepo urls: "http://your.own.repository/url";
}

dependencies {
    compile "dubious:origin:UNKNOWN";
}

Существует много других преимуществ использования менеджера хранилища, таких как кэширование удаленных артефактов, удаление артефактов из scm, промежуточные выпуски, более детальные пользовательские разрешения и т. Д.

С другой стороны, вы бы добавили сервер, который несет некоторые накладные расходы на поддержание ваших сборок.

Зависит от размера, если ваш проект, я полагаю.

3 голосов
/ 06 апреля 2010

Возможно, я что-то упустил из прочтения вашего вопроса, если предположить, что ваше хранилище gradle имеет тип flatDir, вы должны быть в состоянии скопировать туда файлы в форме myjar-1.0.jar и разрешить их как myjar версии 1,0.

Не уверен, почему Gradle должен запускать maven для доступа к локальному репозиторию maven. Вы можете просто определить репозитории Maven, и это должно разрешить зависимости. Вы можете использовать gradle upload, чтобы вытолкнуть банки локальных или удаленных репозиториев Maven, если вам нужно. В этом случае он выполнит maven.

1 голос
/ 12 мая 2010

Я думаю, что-то вроде этого должно работать:

dependencies {
  files('yourfile.jar')
}

У тебя это работает?

...