Gradle - 即使打包在 jar 中也无法加载 Java 类

我的 gradle 构建文件是


plugins {

    // Apply the java plugin to add support for Java

    id 'java'


    // Apply the application plugin to add support for building a CLI application

    id 'application'

}


apply plugin: 'java'

jar {

    from configurations.runtime

    manifest {

        attributes(

            'Created-By':'Gmack',

            'Main-Class':'myapprunner.App',

            'Class-Path':'mydaos-1.0.jar'

        )


    }


}


allprojects{


  repositories {

      jcenter()

  }

}


subprojects {

   version = '1.0'

   apply plugin: 'java'

}


dependencies {

    // This dependency is used by the application.

    implementation 'com.google.guava:guava:27.1-jre'


    // Use JUnit test framework

    testImplementation 'junit:junit:4.12'


    // Compile Project for dependency

    compile project(':mydaos')

}


application {

    // Define the main class for the application

    mainClassName = 'myapprunner.App'

}

当我使用运行应用程序时java -jar myapprunner.jar


我得到一个ClassNotFoundException


Caused by: java.lang.ClassNotFoundException: com.mydaos.Library

    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)

    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)

    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

    ... 1 more

我可以确认罐子已经装好。不知道为什么这没有解决问题。


任何帮助,将不胜感激。


互换的青春
浏览 182回答 2
2回答

jeck猫

插件java被应用了两次,很可能是从(or )com.mydaos.Library中拉入的。假设项目未构建或类路径错误。compile project(':mydaos')'Class-Path':'mydaos-1.0.jar'

萧十郎

默认情况下,依赖类(项目/外部 jar)不会打包在你的 jar 中。您正在使用将您的类、依赖项和执行脚本捆绑在一个 zip 中的应用程序插件,因此您应该使用它。该插件还向您的项目添加了一个“运行”任务,以通过 gradle 运行您的主类以用于开发目的。有关更多信息,请参阅应用程序插件文档如果您想将依赖项打包到您的 jar(称为 uber jar)中,请参见此处。如果你这样做,我建议你停止使用应用程序插件'Class-Path':'mydaos-1.0.jar'这假设它mydaos-1.0.jar位于您正在运行的同一文件夹中,java -jar ...但情况可能并非如此
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java