В gradle - как я могу встраивать jars внутри моего сборки jar сборки в каталог lib (конкретно lib/enttoolkit.jar и lib/mail.jar)?gradle - как мне создать банку с дистрибутивом lib с другими баночками?
ответ
Отменен дословно: http://docs.codehaus.org/display/GRADLE/Cookbook#Cookbook-Creatingafatjar
Gradle 0,9:
jar {
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
Gradle 0,8:
jar.doFirst {
for(file in configurations.compile) {
jar.merge(file)
}
}
Вышеуказанные фрагменты будут содержать только зависимости компиляции для этого проекта, а не какое-либо транзитивны выполнение зависимостей. Если вы также захотите объединить их, замените configurations.compile на configurations.runtime.
EDIT: только выбрать банки вам нужно
Создайте новую конфигурацию, releaseJars возможно
configurations {
releaseJars
}
Добавить банки, которые вы хотите к конфигурации
dependencies {
releaseJars group: 'javax.mail', name: 'mail', version: '1.4'
//etc
}
затем использовать эту конфигурацию в задаче, описанной выше.
Я на 0.9rc1. поэтому попробовал свое первое предложение. Вытащил всевозможные вещи, которых я не хотел ..... –
ближе Я думаю ... проблема в том, что мне нужны банки в каталоге lib. Это тянет классы из банок. Я хочу Lib/почту и Библиотека/enttoolkit в выходной банке –
это работает ... вроде: sourceSets { главный { ява { SRCDIR "$ wepTrunk/OSGi/mycompany.osgi.server/ЦСИ" } ресурсов { SRCDIR "/Users/phil/dev/trunk/osgi/mycompany.osgi.server/lib" }} } это ставит банки из моего/пользователей// DEV Фила/соединительном/OSGi /mycompany.osgi.server/lib в моей выходной баночке, но не в каталоге «lib». Любые идеи, как их получить в каталоге lib? –
Мне нужно было то же самое, что вы просили, и использовали этот метод. вам может не понадобиться специальное объявление конфигурации, но мне нужно было отделить локально используемые файлы jar от объявленных в файле супер-сборки.
configurations{
//declare custom config if necessary, otherwise just use compile
myLibs
}
dependencies {
//add lib/*.jar files to myLibs
myLibs fileTree(dir: 'lib', include: '*.jar')
compile {
//set compile configuration to extend from myLibs
extendsFrom myLibs
}
}
// task to copy libs to output/lib dir
task copyToLib(type: Copy) {
into "$buildDir/output/lib"
from configurations.myLibs
}
jar {
//include contents of output dir
from "$buildDir/output"
manifest {
//...
}
}
//set build task to depend on copyToLib
build.dependsOn(copyToLib)
Если у вас есть все банки внутри каталога (позволяют называть его libs
) в вашем проекте, вам нужно только это:
jar {
into('lib') {
from 'libs'
}
}
Я предполагаю, что это более вероятно, что эти банки являются зависимостями какая-то. Тогда вы могли бы сделать это следующим образом:
configurations {
// configuration that holds jars to copy into lib
extraLibs
}
dependencies {
extraLibs 'org.something:something-dep1:version'
extraLibs 'org.something:something-dep2:version'
}
jar {
into('lib') {
from configurations.extraLibs
}
}
Если вы хотите все зависимости вы также можете скопировать из 'configurations.runtime', который дает вам зависимости' compile', что избавляет вас от необходимости создавать собственную конфигурацию 'extraLibs'. – Thunderforge
Ошибка: Не удалось найти метод jar() для аргументов [build_bndovev91pu8trwrdngc8qh7i $ _run_closure5 @ 3be2321e] в проекте ': app' типа org.gradle.api.Project. – naXa
мне нужно сделать что-то подобное и не вполне в состоянии получить то, что предложили работать Гус и stigkj, но получили достаточно близко, чтобы с их помощью получить эту работу (Гус "пример взорвал на dependencies { compile { extendsFrom myLibs }}
закрытии для меня.
apply plugin: 'groovy'
repositories {
mavenCentral()
}
configurations {
// custom config of files we want to include in our fat jar that we send to hadoop
includeInJar
}
dependencies {
includeInJar 'org.codehaus.groovy:groovy:1.8.6'
configurations.compile.extendsFrom(configurations.includeInJar)
}
jar {
into('lib') {
println "includeInJar: " + configurations.includeInJar.collect { File file -> file }
from configurations.includeInJar
}
}
Затем работает gradle jar
и рассматривают созданную банку дает мне этот вывод, показывая, что я получаю .jar файл, чтобы иметь заводные, а также все банки, что это зависит от внутри «жировой банки»:
% gradle jar
includeInJar: [/Users/tnaleid/.gradle/caches/artifacts-8/filestore/org.codehaus.groovy/groovy/1.8.6/jar/553ca93e0407c94c89b058c482a404427ac7fc72/groovy-1.8.6.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/antlr/antlr/2.7.7/jar/83cd2cd674a217ade95a4bb83a8a14f351f48bd0/antlr-2.7.7.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm/3.2/jar/9bc1511dec6adf302991ced13303e4140fdf9ab7/asm-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-tree/3.2/jar/cd792e29c79d170c5d0bdd05adf5807cf6875c90/asm-tree-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-commons/3.2/jar/e7a19b8c60589499e35f5d2068d09013030b8891/asm-commons-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-util/3.2/jar/37ebfdad34d5f1f45109981465f311bbfbe82dcf/asm-util-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-analysis/3.2/jar/c624956db93975b7197699dcd7de6145ca7cf2c8/asm-analysis-3.2.jar]
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
BUILD SUCCESSFUL
Total time: 3.387 secs
% jar tvf build/libs/gradletest.jar
0 Mon Mar 12 11:40:00 CDT 2012 META-INF/
25 Mon Mar 12 11:40:00 CDT 2012 META-INF/MANIFEST.MF
0 Mon Mar 12 11:40:00 CDT 2012 lib/
5546084 Mon Mar 05 13:13:32 CST 2012 lib/groovy-1.8.6.jar
445288 Mon Mar 05 13:13:38 CST 2012 lib/antlr-2.7.7.jar
43398 Mon Mar 05 13:13:40 CST 2012 lib/asm-3.2.jar
21878 Mon Mar 05 13:13:40 CST 2012 lib/asm-tree-3.2.jar
33094 Mon Mar 05 13:13:40 CST 2012 lib/asm-commons-3.2.jar
36551 Mon Mar 05 13:13:40 CST 2012 lib/asm-util-3.2.jar
17985 Mon Mar 05 13:13:40 CST 2012 lib/asm-analysis-3.2.jar
Хорошо, я сделал то, что описано здесь, но я все еще получаю «Исключение в потоке» main «java.lang.NoClassDefFoundError: com/rabbitmq/client/ConnectionFactory'. Должен ли я каким-то образом настроить classpath? – omikron
прост:
task copyToLib(type: Copy) {
into "$buildDir/libs/lib"
from configurations.runtime
}
jar { dependsOn copyToLib }
запустить его:
$ gradle jar
...
$ tree build/libs
build/libs
├── your-project-0.0.1.BUILD-SNAPSHOT.jar
└── lib
├── akka-actor-2.0.jar
├── akka-camel-2.0.jar
├── ... ... ...
├── spring-expression-3.1.0.RELEASE.jar
└── zmq-2.1.9.jar
1 directory, 46 files
Это копирует библиотеки в выходной каталог, но не в файл JAR - это был вопрос. – TheOperator
Ниже кода может быть судим.Это зависит от поставленной задачи банку и Типа Jar
task createJobJar(dependsOn:jar,type:Jar) {
manifest {
attributes(
"Implementation-Title": 'Job '
,"Implementation-Version": version
)
}
classifier 'job'
destinationDir new File("$buildDir")
into('libs'){
from configurations.compile
}
into('classes'){
from "$buildDir/classes"
}
into('resources'){
from "$projectDir/src/main/resources"
}
into('scripts'){
from "$projectDir/src/main/scripts"
}
}
Приведенный выше код будет упаковать различное содержание внутри различных каталогов. Протестировано на градиенте 2.2
Работает отлично – nikhil
В моем случае мне нужно было включить содержимое корневого проекта Jar в подпроект Jar. Таким образом, чтобы сделать его работу, можно использовать этот шаблон:
jar{
manifest{
attributes 'Main-Class':'<main class>'
}
def conf= configurations.find {it.name.equals('compile') }
File jar= conf.files.find {it.name.contains('<name or part of the name of produced Jar>')}
FileTree fileTree=zipTree(jar)
from fileTree
}
Мой пример:
jar{
manifest{
attributes 'Main-Class':'alexiy.jace.Jace'
}
description='Make a runnable API Jar'
def conf= configurations.find {it.name.equals('compile') }
File tools= conf.files.find {it.name.contains('Tools')}
FileTree fileTree=zipTree(tools)
from fileTree
}
task <taskname>(type: Jar) {
archiveName 'nameofjar.jar'
doFirst {
manifest {
attributes 'Class-Path': configurations.compile.files.collect{ project.uri(it) }.join(' ')
}
}
}
Немного о том, что этот код может помочь объяснить некоторые из конкретных бит? – Tom
- 1. Как создать исполняемую банку с баночками зависимости
- 2. Gradle: Как создать несколько банку?
- 3. Создание OSGi Bundle с зависимыми Баночками с использованием Gradle
- 4. Создайте банку с дельта-файлами между двумя баночками
- 5. Как создать исполняемый банку с использованием maven для приложения Javafx с зависимыми баночками?
- 6. Создайте банку хаоса с внешними зависимостями с помощью Gradle
- 7. Gradle ShadowJar с другими ресурсами SourceSet
- 8. NoClassDefFoundError с внешними баночками
- 9. Maven. Что делать с «бездомными» баночками?
- 10. Gradle> Как развернуть JAR только с необходимыми баночками-зависимостями на удаленном компьютере
- 11. Ошибки компоновщика с пользовательским построением tcl85.lib, работает с дистрибутивом ActiveState tcl85.lib
- 12. Создайте банку с внешними зависимостями с помощью Gradle
- 13. Сложности с дистрибутивом -
- 14. здания тень банку с Gradle локально
- 15. Проблемы с дистрибутивом InHouse
- 16. Как создать толстую банку с градиентом kotlin скрипта
- 17. Создать банку без компиляции с градиентом
- 18. Публикация банку в Gradle
- 19. Как создать отличную банку с eclipse/ggts?
- 20. Проблемы с дистрибутивом iOS предприятия
- 21. Как создать толстую банку с компиляцией кода
- 22. maven создать толстую банку с внешней библиотекой
- 23. Как получить исполняемый javafx jar в комплекте с зависимыми баночками?
- 24. Как создать весеннюю исполняемую банку с maven?
- 25. Проблема построения исполняемого файла банку с Gradle и Спринг-ботинке
- 26. Как создать жирную банку?
- 27. проект с несколькими модулями - сборка zip со всеми зависимыми баночками?
- 28. Создание библиотеки jar с зависимыми баночками с плагином зависимости maven
- 29. Как создать плагин OpenFire с использованием Gradle в Intellij?
- 30. Groovy - Как создать банку
https://stackoverflow.com/questions/4871656/using-gradle-to- build-a-jar-with-dependencies –