首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenJDK不能在jar中找到主类,而OracleJDK可以

OpenJDK不能在jar中找到主类,而OracleJDK可以
EN

Stack Overflow用户
提问于 2016-10-26 16:05:48
回答 2查看 2.4K关注 0票数 4

我有一个问题,就是我根本不能用OpenJDK运行任何jars,与普通的OracleJDK一样,这是没有问题的。

代码语言:javascript
复制
OpenJDK # java -version

openjdk version "1.8.0_101"
OpenJDK Runtime Environment (IcedTea 3.1.0) (suse-14.3-x86_64)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)

当我使用这个JDK运行jar时,它永远找不到主类,即使它在清单中很难找到。

代码语言:javascript
复制
OracleJDK # java -version

java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

当我用这个JDK启动一个jar时,没有问题。

我是否需要在OpenJDK中配置一些东西,这样它就可以从清单中找到主类,或者是OpenJDK没有这样做的原因?

编辑:

源文件结构:

代码语言:javascript
复制
-- ui  
---- Main.java  

Gradle构建脚本:

代码语言:javascript
复制
group 'some.group'
version '0.1'

apply plugin: 'java'
apply plugin: 'application'

mainClassName = "ui.Main"

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.zeromq', name: 'jeromq', version: '0.3.5'
    compile group: 'org.controlsfx', name: 'controlsfx', version: '8.40.12'

    testCompile group: 'junit', name: 'junit', version: '4.11'
}

jar {
    manifest {
        attributes 'Implementation-Title': 'PlaceholderTitle',
                'Implementation-Version': version,
                'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
                'Main-Class': mainClassName
    }
}

基于installDist的建筑

清单:

代码语言:javascript
复制
Manifest-Version: 1.0
Implementation-Title: PlaceholderTitle
Implementation-Version: 0.1
Class-Path: jeromq-0.3.5.jar controlsfx-8.40.12.jar
Main-Class: ui.Main
//new line here
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-27 11:52:17

好吧我找到答案了。问题是我有一个JavaFX应用程序,而安装的OpenJDK运行时环境不支持这一点,我不明白,因为JavaFX是Java8标准的一部分。

OpenJDK库/ext文件夹:

代码语言:javascript
复制
cldrdata.jar       nashorn.jar
dnsns.jar          sunec.jar
icedtea-sound.jar  sunjce_provider.jar
jaccess.jar        sunpkcs11.jar
localedata.jar     zipfs.jar
meta-index

正如您所看到的,如果您熟悉它,那么jfxrt.jar就会丢失。这解释了为什么它不能加载主类,因为它继承自javafx.application.Application

票数 7
EN

Stack Overflow用户

发布于 2016-10-27 00:01:17

您不需要为jar的启动配置任何东西。OracleJDK与OpenJDK基本上是一样的,它基本上增加了一些商业特性。

如果发生了一些奇怪的事情,最好的方法就是用尽可能小的例子来再现怪诞。如果你真的不能喝任何的罐子,那么Gradle复制它是一种过分的行为。另一方面,使用一个实际的命令来启动JVM将是有帮助的。

下面是创建一个带有主类的jar并执行它的基本命令--它在任何JDK和任何配置中都应该运行良好。

代码语言:javascript
复制
$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime enter code hereEnvironment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
$ echo 'public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }' > HelloWorld.java
$ javac HelloWorld.java
$ jar cfe HelloWorld.jar HelloWorld HelloWorld.class
$ java -jar HelloWorld.jar
Hello, World!
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40267122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档