【问题标题】:gradle project: error couldn't find main classgradle项目:错误找不到主类
【发布时间】:2017-12-03 05:35:23
【问题描述】:

我的项目结构如下:

Root project 'rmi-tutorial'
+--- Project ':client'
+--- Project ':lib'
\--- Project ':server'

客户端主类的路径如下所示:

client/src/main/java/client/ComputePi.java

我的build.gradle 为客户端子项目看起来像这样:

dependencies {
    compile project(':lib')
}
mainClassName = "ComputePi"

主要的 build.gradle 文件是这个:

subprojects {
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'application'
    repositories {
       mavenCentral()
    }

    dependencies {
    //compile project(':server')
    //compile project(':client')
        testCompile 'junit:junit:4.12'
    }

    version = '1.0'

    jar {
        manifest.attributes provider: 'gradle'
    }
}

到目前为止,jar 的生成工作正常,但 jar 中的 MANIFEST.MF 文件是错误的。它包含以下内容:

Manifest-Version: 1.0
provider: gradle

我指定的主要课程在哪里?当我尝试执行由 gradle application-plugin 创建的 startscript 时,出现错误:couldn't find nor load main class

jar 包含所有必要的类文件

【问题讨论】:

  • 试试mainClassName = "client.ComputePi"
  • 我得到同样的错误:无法找到或加载主类:“client.ComputePi”
  • 我的评论还不够,这只是一个观察结果,而不是完整的答案。看看@Vampire 的回答
  • 谢谢。有了你的评论+@vampires 的回答,我就成功了。

标签: java gradle


【解决方案1】:

application 插件不会生成带有 Main-Class 条目的可运行 JAR。相反,它会生成一个包含 Windows 和 *nix 启动脚本的发行版,其中使用主类并将所有库放在类路径中。

如果你想要一个可运行的 JAR,你必须自己配置它,或者使用生成胖 JAR 的插件之一,还包括可运行 JAR 中的依赖项(我不喜欢这样,但如果目标计算机具有正确的文件关联集)。如果目标计算机 e. G。已将 JAR 文件与归档工具关联,双击 JAR 将在归档工具中打开 JAR,而不是运行您的应用程序。

如果要运行应用程序,请使用gradlew run,或执行gradlew installDist,然后执行安装到build/install/... 的应用程序。这就是application 插件的工作原理。使用gradlew distZipgradlew distTar,您可以为您的应用程序创建可交付的存档。

【讨论】:

  • 很高兴知道,这里也为我学习了很多东西,对于我的小应用程序,我刚刚扩展了jar{} 任务并打包了依赖项,它很快,并不理想,但它可以工作,而且我可能需要为我的另一个实际上已经变大的应用程序改变方法,并且使用提到的方法不是很好,就像你在我看到的其他一些改变中所说的那样。用 Gui 创建可运行的 Java 应用程序更可取?
  • @LazerBanana 我不明白你的意思?带有 GUI 的可运行 Java 应用程序非常棒。我只是不喜欢胖 JAR,但如果这是你的问题,我更喜欢 application 插件产生的东西。
  • 我明白了,好吧,我将尝试重构我的应用程序,另一方面,如果这只是一种偏好。感谢您的回答,即使题外话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2021-09-18
  • 2012-04-18
  • 1970-01-01
  • 2021-07-17
相关资源
最近更新 更多