我有一个使用Idea编写的Java应用程序,它包含gradle的几个JAR(所有依赖项都在下面)。我需要从中构建一个瘦JAR(即在/ libs文件夹中单独使用大多数库)。但我只能通过java -jar运行我的应用程序,如果它是一个胖罐子(即包括其内部的所有罐子)。如果我使用简单的jar' gradle任务,它可以很好地构建我的瘦罐,但我无法执行它,因为它找不到任何需要的库(即spring-boot- *等)。
请您告诉我我应该在我的任务中写些什么来创建一个jar,它会考虑到库中相对于jar的/ libs文件夹。
所以我的依赖项部分是:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile("org.hibernate:hibernate-core:4.3.8.Final")
compile("org.hibernate:hibernate-entitymanager:4.3.8.Final")
compile("org.springframework:spring-core:4.1.4.RELEASE")
compile("org.springframework:spring-beans:4.1.4.RELEASE")
compile("org.springframework:spring-context:4.1.4.RELEASE")
compile("org.springframework:spring-jdbc:3.1.0.RELEASE")
compile("org.springframework:spring-orm:4.1.2.RELEASE")
compile("org.springframework:spring-tx:4.1.2.RELEASE")
compile('org.slf4j:slf4j-api:1.7.10')
compile("mysql:mysql-connector-java:5.1.9")
compile("com.mchange:c3p0:0.9.5")
compile("org.hibernate:hibernate-c3p0:4.3.7.Final")
compile("org.apache.commons:commons-lang3:3.0")
compile("org.aspectj:aspectjweaver:1.8.4")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.boot:spring-boot-starter-tomcat")
compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity3:2.1.1.RELEASE")
compile("org.apache.commons:commons-lang3:3.0")
}
将所有需要的jar复制到lib子文件夹的任务:
task copyToLib(type: Copy) {
into "$buildDir/libs/lib"
from configurations.runtime
}
构建jar(无法启动)的任务
jar {
manifest {
attributes 'Implementation-Title': 'MyApp',
'Implementation-Version': version,
'Start-Class': 'my.pkg.Application',
'Main-Class': 'org.springframework.boot.loader.JarLauncher'
}
baseName = 'MyApp'
version = '1.6'
}
一个构建胖罐的任务(运行得很好)
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'MyApp',
'Implementation-Version': version,
'Main-Class': 'my.pkg.Application'
}
baseName = project.name + '-fat'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}