Jenkins 构建的 jar 小于 Gradle 构建的 Jar
Jenkins built jar less size tha Gradle built Jar
我使用命令 gradlew bootJar 在我的本地机器 (windows) 中构建了一个可执行 jar。jar 的大小是 17,178 Kb
现在我尝试构建 运行 在本地机器中使用 jenkins only.Jar 生成的大小比 gradle 构建的 jar.The jar 的大小小得多只有 2 Kb.
我尝试将 task 作为 jar 并在 gradle 脚本 jenkins 中构建 。
当我尝试 运行 罐子时,出现如下错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
at com.example.demo.DemoApplication.main(DemoApplication.java:13)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
build.gradle:
plugins {
id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-parent', version: '2.2.2.RELEASE', ext: 'pom'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
jar {
enabled=true
}
jar {
manifest {
attributes(
'Main-Class': 'com.example.demo.DemoApplication'
)
}
}
test {
useJUnitPlatform()
}
jenkins 的控制台输出:
有人帮助me.Thank你
在这种情况下,创建一个简单的 Jar 将不起作用,因为它只会将您的源代码打包为一个 jar。你需要的是独立的脂肪罐。
Spring 启动插件已经包含构建 fat jar 所需的任务。您应该从 gradle.
中删除以下代码
jar {
enabled=true
}
jar {
manifest {
attributes(
'Main-Class': 'com.example.demo.DemoApplication'
)
}
}
在您的 Jenkinsfile 中,将构建 jar 的命令更新为 ./gradlew build
。
如果构建成功,会在build/libs
目录下生成一个fat jar。
我使用命令 gradlew bootJar 在我的本地机器 (windows) 中构建了一个可执行 jar。jar 的大小是 17,178 Kb
现在我尝试构建 运行 在本地机器中使用 jenkins only.Jar 生成的大小比 gradle 构建的 jar.The jar 的大小小得多只有 2 Kb.
我尝试将 task 作为 jar 并在 gradle 脚本 jenkins 中构建 。
当我尝试 运行 罐子时,出现如下错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
at com.example.demo.DemoApplication.main(DemoApplication.java:13)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
build.gradle:
plugins {
id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-parent', version: '2.2.2.RELEASE', ext: 'pom'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
jar {
enabled=true
}
jar {
manifest {
attributes(
'Main-Class': 'com.example.demo.DemoApplication'
)
}
}
test {
useJUnitPlatform()
}
jenkins 的控制台输出:
有人帮助me.Thank你
在这种情况下,创建一个简单的 Jar 将不起作用,因为它只会将您的源代码打包为一个 jar。你需要的是独立的脂肪罐。
Spring 启动插件已经包含构建 fat jar 所需的任务。您应该从 gradle.
中删除以下代码jar {
enabled=true
}
jar {
manifest {
attributes(
'Main-Class': 'com.example.demo.DemoApplication'
)
}
}
在您的 Jenkinsfile 中,将构建 jar 的命令更新为 ./gradlew build
。
如果构建成功,会在build/libs
目录下生成一个fat jar。