我试图创建一个有依赖项的jar,因为我在用java -Dspring.config.location=myProperties -jar myJar启动jar时得到了一个NoClassDefFoundError,经过大量的搜索后,我发现我可以在jar块中使用以下解决方案来实现这一点:
from{
configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it)}
}除了构建jar的时间(1分钟)之外,所有这些都很好,根据这个答案:Gradle: Build 'fat jar' with Spring Boot Dependencies我不需要创建额外的任务,对于bootRepackage就足够了,但是我在bootRepackage中得到了上面提到的错误,我不知道为什么。
这是我的build.gradle的内容,我使用的是spring boot 1.5.15:
/*
* This file was generated by the Gradle 'init' task.
*/
buildscript {
ext.springBootVersion = '1.5.15.RELEASE'
ext.managementVersion = '1.0.6.RELEASE'
ext.axis2Version = '1.7.9'
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
//classpath "io.spring.gradle:dependency-management-plugin:${managementVersion}"
//classpath "com.intershop.gradle.wsdl:wsdl-gradle-plugin:2.0.1"
}
}
plugins {
id 'java'
id 'maven'
id 'org.springframework.boot' version '1.5.15.RELEASE'
id 'io.spring.dependency-management' version '1.0.6.RELEASE'
}
configurations{
implementation{
exclude group: 'javax.servlet', module: 'servlet-api'
}
}
dependencies {
implementation "org.springframework.boot:spring-boot-starter:${springBootVersion}"
implementation 'org.springframework.integration:spring-integration-mongodb'
implementation 'org.springframework.integration:spring-integration-amqp'
testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}"
testImplementation 'org.mockito:mockito-core:2.6.1'
implementation 'org.apache.ws.commons.axiom:axiom-jaxb:1.2.20'
implementation('org.apache.axis2:axis2-kernel:1.7.9'){
exclude group: 'javax.servlet', module: 'servlet-api'
//The exclude above don't work
}
implementation "org.apache.axis2:axis2-kernel:${axis2Version}"
implementation "org.apache.axis2:axis2-wsdl2code-maven-plugin:${axis2Version}"
implementation "org.apache.axis2:axis2-transport-http:${axis2Version}"
}
wsdl {
axis2 {
genNameAxis2 {
//someAxis2Tasks
}
}
}
wsdl2java {
//someWsdlTasks
}
wsdl2javaExt {
cxfVersion = "3.2.1"
}
jar {
manifest{
attributes ('Main-Class': 'dummy.Application')
}
from{
configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it)}
}
archiveBaseName = 'projectName'
archiveVersion = '1.0.0'
}
bootRepackage{
mainClass = 'dummy.Application'
//classifier = 'boot' I'm getting an error with this argument
}
repositories {
mavenLocal()
}
group = 'dummy.group'
version = '1.0.0-SNAPSHOT'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'提前谢谢你。
发布于 2019-07-04 01:34:17
在升级到Gradle 5并对依赖项使用“实现”而不是“编译”后,我也遇到了同样的问题。
Gradle构建了一个没有子项目jar或依赖项的主jar(根本没有BOOT-INF/lib目录)。在父项目中将“implementation”改回“compile”只是修复了问题(没有其他更改)。
因此,很明显,Spring Boot 1.5.9 Gradle插件不能与新的实现配置一起工作。请注意,Spring Boot2和新的bootJar任务工作正常,这个问题只与旧的bootRepackage和新的实现配置有关。
https://stackoverflow.com/questions/54995494
复制相似问题