当前位置: 首页 > 知识库问答 >
问题:

Java Gradle构建:NoClassDefFoundError

倪举
2023-03-14

我的build.gradle文件如下所示

apply plugin: 'java' sourceCompatibility = 1.8

repositories {
    mavenCentral() }


dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile 'io.javalin:javalin:1.3.0'
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.4'
    compile 'org.slf4j:slf4j-simple:1.7.25' }

jar {
    manifest {
        attributes(
                'Class-Path': configurations.runtime.files.collect {"$it.name"}.join(' '),
                'Main-Class': 'products.ProductAPI'
        )
    } }

task stage {
    dependsOn 'build'
    dependsOn 'clean'
    build.mustRunAfter clean }

共有1个答案

劳仲渊
2023-03-14

要在没有任何noClassDefFoundError的情况下运行应用程序,您应该在运行时类路径中有依赖项。创建一个胖罐子是最简单的解决方案。更改您的jar部分,如下所示;

jar {
    manifest {
       attributes(
          'Class-Path': configurations.compile.files.collect {"$it.name"}.join(' '),
          'Main-Class': 'products.ProductAPI')}
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

运行gradle build命令和具有依赖项的jar将被创建。另一种方法是将JAR添加到运行时类路径中;使用java-cp标志。(另外,如果应用程序已经配置了类路径文件夹,复制此文件夹中的依赖项将把它们添加到类路径中)

 类似资料:
  • 问题内容: 我需要通过代理服务器从Gradle进行Web访问,才能将Gradle / Artifactory集成用于Jenkins。为了减少可能的问题原因,我在build.gradle中手动添加了Artifactory插件,并从命令行运行它: 按照此描述,我在主目录的.gradle / gradle.properties中指定了以下内容: 使用上面的代理配置(已知可以正常工作),它将失败: 11:

  • 3.4.2 构建类型 默认情况下,Android plugin 会自动的设置工程,构建 release 和 debug 两个版本。 他们主要的差异主要在于是否可以在设备上调试应用以及APK如何签名。 debug 版本会被使用已知的名称/密码自动生成的密钥/证书签名。release 版本在构建过程中不会被签名,需要构建后再签名。 这些配置可以通过一个叫 BuildType 配置。默认情况下,已经创建

  • 构建 由 fis3-command-release 插件提供构建能力 FIS3 的构建不会修改源码,而是会通过用户设置,将构建结果输出到指定的目录。 例子 在正式介绍 FIS3 功能之前,我们给定一个简单的例子,例子下载地址 demo-simple 命令 进入项目根目录,执行命令,进行构建。 项目根目录:FIS3 配置文件(默认fis-conf.js)所在的目录为项目根目录。 fis3 relea

  • 每个Gradle构建都包括三个基本的构建块:项目(projects)、任务(tasks)和属性(properties),每个构建至少包括一个项目,项目包括一个或者多个任务,项目和任务都有很多个属性来控制构建过程。 Gradle运用了领域驱动的设计理念(DDD)来给自己的领域构建软件建模,因此Gradle的项目和任务都在Gradle的API中有一个直接的class来表示,接下来我们来深入了解每一个组

  • 静态资源标签 以下方式引用的静态资源会被构建: img、video、audio、embed 和 source 标签的 src 属性 link 标签的 href 属性 object 标签的 data 属性 source 标签的 srcset 属性 不必构建的标签,添加coolieignore属性即可,如: <img src="./demo1.png"> <img src="./demo1.png"

  • CSS 合并 详细参考 内容压缩策略。 CSS 压缩 CSS 压缩采用的 clean-css 模块,默认配置为: { // 高级优化 advanced: false, // 属性合并 aggressiveMerging: false, // 兼容性,“ie7”、“ie8”、“*”(ie9+) compatibility: 'ie7', //

  • JS 合并 详细参考 内容压缩策略。 JS 压缩 JS 压缩采用的是 uglify-js 模块,默认配置为: { // 连续单语句,逗号分开 // 如: alert(1);alert(2); => alert(1),alert(2) sequences: false, // 重写属性 // 如:foo['bar'] => foo.bar proper

  • Blockly由一百多个JavaScript文件组成。 对于最终用户来说,通过Internet加载它们是一种缓慢的体验。 为了使Blockly加载更快,可以将其压缩为六个文件,总共约720kb。 Blockly附带了源代码和压缩文件,因此除非您要侵入core, blocks, generators, 或 msg目录,否则不需要构建Blockly。 Blockly压缩非常简单。 假设您已安装Pyth