【问题标题】:Jenkins built jar less size tha Gradle built JarJenkins 构建的 jar 比 Gradle 构建 Jar 更小
【发布时间】:2020-04-10 21:41:01
【问题描述】:

我在本地机器(windows)中使用命令gradlew bootJar构建了一个可执行的jar。jar的大小是17,178 Kb

现在我尝试仅在本地机器上构建和运行使用 jenkins。生成的 Jar 的大小比 gradle 构建的 jar 小得多。jar 的大小只有 2 Kb。

我通过在 gradle script jenkins 中将 task 作为 jar 和 build 进行了尝试。

当我尝试运行 jar 时,出现如下错误

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 的控制台输出:

谁能帮帮我。谢谢

【问题讨论】:

    标签: spring spring-boot jenkins gradle jenkins-cli


    【解决方案1】:

    在这种情况下,创建一个简单的 Jar 将不起作用,因为它只会将您的源代码打包为一个 jar。您需要的是独立的脂肪罐。

    Spring boot 插件已经提供了构建 fat jar 所需的任务。您应该从 gradle 中删除以下代码。

    jar {
        enabled=true
    }
    jar {
        manifest {
            attributes(
                    'Main-Class': 'com.example.demo.DemoApplication'
            )
        }
    }
    

    在您的 Jenkinsfile 中,将构建 jar 的命令更新为 ./gradlew build。 如果构建成功,会在build/libs目录下生成一个fat jar。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-09
      • 2018-07-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2021-03-18
      • 2012-07-13
      相关资源
      最近更新 更多