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

Gradle:向JAR文件的类路径添加类

万阳嘉
2023-03-14

我希望title本身是描述性的,但要明确的是,我试图在greeting-service.jar中包含jar(即,error-handling-service.jar)。在构建之后,我在新项目(即TestApplication)中包含了greeting-service.jar,但在执行我得到的TestApplication时(顺便说一句,TestApplication不是一个gradle项目)

Exception in thread "main" java.lang.NoClassDefFoundError: co/common/exception/BaseException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)

BaseException是错误处理服务模块中的一个类

manifest {
            attributes(
                    "Manifest-Version": "1.0",
                    "Class-Path": configurations.compile.collect { it.getName() }.join(' ')
            )
        }
buildscript {
    repositories {
        mavenCentral()
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven'

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    compile('org.apache.commons:commons-lang3:3.0')
    compile('org.apache.commons:commons-collections4:4.0')
    compile('org.slf4j:slf4j-api:1.7.25')
    compile('co.common:error-handling-service:1.0.0-SNAPSHOT')
    testCompile("org.mockito:mockito-all:1.9.5")
    testCompile('junit:junit:4.12')
}

jar {
    baseName = 'greeting-service'
    version = '1.0.0-SNAPSHOT'
    manifest {
        attributes(
                "Manifest-Version": "1.0",
                "Class-Path": configurations.compile.collect { it.getName() }.join(' ')
        )
    }
}

group = 'co.common'
version = '1.0.0-SNAPSHOT'

sourceCompatibility = 1.8
targetCompatibility = 1.8


task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

在成功构建了greeting-service之后,我在TestApplication中包含了greeting-service.jar,但仍然收到了上面提到的相同异常。

Manifest-Version: 1.0
Class-Path: commons-lang3-3.0.jar commons-io-2.4.jar commons-collections
 4-4.0.jar slf4j-api-1.7.25.jar error-handling-service-1.0.0-SNAPSHOT.
 jar commons-logging-1.1.3.jar

为什么会发生这种情况,应该怎么做?

共有1个答案

经俊茂
2023-03-14

noClassDefFounderRorro,当Java虚拟机在运行时无法找到编译时可用的特定类时,Java中出现了noClassDefounderRorr。例如,如果我们有一个来自类的方法调用或访问一个类的任何静态成员,而该类在运行时不可用,那么JVM将抛出NoClassDefFoundError。

因此,假设您的gradle构建通过了successfull--我可以断定您提供了错误的error-handling-service-1.0.0-snapshot.jar,其中不包含co/common/exception/baseException类。

你应该仔细检查这个罐子的实际内容。

 类似资料:
  • 我正在尝试使用第三方应用程序来测试Liberty Server18.0,并尝试在Linux上向Liberty Server类路径添加一个库。这个库名为:“com.ibm.websphere.javaee.security.1.0_1.0.21.jar”,它位于Liberty服务器的“/wlp/dev/api/sec”下。 我看得出来,它从来没上过子弹。我如何将这个jar添加到我的defaultSe

  • 我有一个批处理文件,它使用依赖于tools.jar(来自JDK)的maven运行java类。 例如: mvn-f.\pom.xml-e exec:java-dfile.encoding=“utf-8”-dexec.mainclass=MyClass-dexec.args=“%1%2%3%4%5%6%7%8%9”-dexec.classpathscope=runtime 我的程序使用JDK中的too

  • 问题内容: 我在上,我尝试了下都无济于事。还尝试将jar移到src目录,但是java文件仍然无法编译。尝试在脚本中简单地导入httpclient。 问题答案: 安装您的JDK并将 其放置 。难道 不是 .jar文件复制到你的JDK的文件夹! 如果您还没有一个IDE,我建议您使用Eclipse或Netbeans这样的IDE。 我将建立一个新项目,创建或导入您的源,并为该项目设置一个类路径。 如果那行

  • 我正在使用maven构建工具。我的意图是将单独的绝对文件夹[例如:C:\test1.jar,C:\test2.jar]中可用的jar文件添加到类路径中。 我可以看到JAR被添加到war中可用的Manifest.mf文件的类路径中,但当war部署时,它由于“java.lang.ClassNotFoundException”[与test1.jar或test2.jar相关]而失败。 这是否意味着在man

  • 在java9之前,在运行时通过编程方式将外部jar添加到类路径中,每个人都使用: 现在使用java9我们遇到了问题: 在Java9中不再工作。在jdk9下,如何在运行时以编程方式向类路径添加外部jar?

  • 问题内容: 有没有办法使用Eclipse在类路径的目录中包含所有jar文件? 可以通过以下命令使用命令行来完成: 但是如何从日食中做到呢? 编辑: 我在项目文件夹中将条目编辑为: 这是文件所在的文件夹。但这没有用。 更新: 似乎没有直接的方法可以做到这一点。可能最简单的解决方案是创建用户库。 问题答案: 将所有必要的JAR复制到项目内部的文件夹中,而不是使用项目外部的文件夹。 现在,您可以选择该文