结论:制作可执行JAR其实很简单,实际上也很简单,我一直都这么认为,但它今天却给我开一个玩笑,着实折腾了我一阵子,终于解决了,其实就是一个小小的细节问题:Main-Class: XXX,“:”后一定要有空格,XXX后要有回车;
起因:用VAINSTALL制作的发布程序,在HP-UX,SUN_SALORIS上没有问题,而在IBM-AIX却无法执行,因怀疑是JDK之执行java -jar存在bug(其实不是),于是决定做一个可执行JAR到IBM-AIX上进行测试,javac一个默认package的测试类应该在javac时很容易,所以,决定模拟带指定包名的测试类;
过程:
1、在指定目录下创建所需的一切信息,比如在d:/temp/test创建一个Test.java,代码如下:
package temp.test;
public class Test {
public static void main(String[] args) {
System.out.println(System.getProperty("java.version"));
}
}
2、编译上面的测试类
在WINDOW-DOS模式下,执行
写道
D:\>javac -cp temp/test temp/test/Test.java
3、验证2的操作是否达到预期目的
写道
D:\>java temp.test.Test
1.5.0_07
4、创建 MANIFEST.MF
在d:/目录下(任何一个位置都可以,前提是你能让程序找到它)创建一个名为 MANIFEST.MF的文件,其内容为:
写道
Main-Class: temp.test.Test
5、打包产生可执行JAR
写道
D:\>jar -cvfm test.jar MANIFEST.MF temp
标明清单(manifest)
增加:temp/(读入= 0) (写出= 0)(存储了 0%)
增加:temp/test/(读入= 0) (写出= 0)(存储了 0%)
增加:temp/test/Test.class(读入= 492) (写出= 314)(压缩了 36%)
增加:temp/test/Test.java(读入= 144) (写出= 121)(压缩了 15%)
若4中Main-Class的“:”后没有“ ”空格,你将得到类似于下面的信息
写道
D:\>jar -cvfm test.jar MANIFEST.MF temp
java.io.IOException: invalid header field
at java.util.jar.Attributes.read(Attributes.java:393)
at java.util.jar.Manifest.read(Manifest.java:167)
at java.util.jar.Manifest.<init>(Manifest.java:52)
at sun.tools.jar.Main.run(Main.java:123)
at sun.tools.jar.Main.main(Main.java:903)
6、验证5操作是否达到预期目的
写道
D:\>java -jar test.jar
1.5.0_07
若在4中,没有加入“回车换行”,则会产生
写道
D:\>java -jar test.jar
Failed to load Main-Class manifest attribute from
test.jar
警惕:上面是测试样例的制作过程,在打包产生可执行JAR时需要注意两个问题:
写道
A. 指定入口主类
Main-Class: XXX
“:”后一定要有空格,XXX是带包全名的入口主类,且后要有回车,当仅有Main-Class而无Class-Path时;
B.若需要指定依赖类或jar
Class-Path: lib/common.jar lib/dateUtils.jar
“:”后一定要有空格,多个jar之间用" "空格分割,之后别忘记加入回车换行哦~~
遗憾&求助:打jar的问题是解决了,且在AIX上可执行, 但在AIX安装发布程序却问题依旧,终报错为:
写道
$ sh install.sh
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:44)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:39)
at java.lang.reflect.Constructor.newInstance(Constructor.java:516)
at IDEP.launchSetup(IDEP.java:293)
at IDEP.setup(IDEP.java:154)
at IDEP.main(IDEP.java:62)
Caused by: java.lang.NoClassDefFoundError: sun.awt.X11GraphicsEnvironment (initialization failure)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:140)
at java.lang.Class.forNameImpl(Native Method)
at java.lang.Class.forName(Class.java:136)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:89)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
at java.lang.Class.forNameImpl(Native Method)
at java.lang.Class.forName(Class.java:136)
at java.awt.Toolkit$2.run(Toolkit.java:846)
at java.security.AccessController.doPrivileged(AccessController.java:202)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:838)
at sun.swing.SwingUtilities2$AATextInfo.getAATextInfo(SwingUtilities2.java:140)
at javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:1557)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:142)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1592)
at javax.swing.UIManager.setLookAndFeel(UIManager.java:542)
at javax.swing.UIManager.setLookAndFeel(UIManager.java:582)
at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1346)
at javax.swing.UIManager.initialize(UIManager.java:1435)
at javax.swing.UIManager.maybeInitialize(UIManager.java:1423)
at javax.swing.UIManager.getDefaults(UIManager.java:663)
at javax.swing.UIManager.put(UIManager.java:992)
at com.memoire.vainstall.VAGlobals.setLanguage(Unknown Source)
at com.memoire.vainstall.Setup.<init>(Unknown Source)
... 7 more
Caused by: java.lang.InternalError: Can't connect to X11 window server using '132.104.64.177:0.0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.access$100(X11GraphicsEnvironment.java:52)
at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:155)
at java.security.AccessController.doPrivileged(AccessController.java:202)
at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:131)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
at java.lang.Class.forNameImpl(Native Method)
at java.lang.Class.forName(Class.java:136)
at sun.swing.SwingUtilities2.isLocalDisplay(SwingUtilities2.java:1407)
at javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:1556)
... 18 more
查到可用的信息为:
http://www-01.ibm.com/support/docview.wss?uid=swg21321471
java.lang.NoClassDefFoundError: sun.awt.X11GraphicsEnvironment (initialization failure)
Technote (troubleshooting)
Problem
You try to run a Java agent on a Lotus? Domino? for IBM? i (i5/OS?) server. It is failing with the following error message:
"java.lang.NoClassDefFoundError: sun.awt.X11GraphicsEnvironment (initialization failure)"
The agent works when run on Microsoft? Windows?.
Environment
IBM i V5R4
Resolving the problem
IBM i requires that you edit or add the following line to the SystemDefault.properties file.
java.awt.headless=true
但问题依旧未解决,处理中~~
分享到:
相关推荐
"MyEclipse8.5安装Fatjar和制作可执行jar方法" MyEclipse8.5是 Java integrated development environment (IDE),它提供了许多有用的功能和插件来帮助开发者快速构建和部署Java应用程序。Fatjar是一个插件,允许...
### 使用 Built Fat Jar 制作可执行 JAR 文件详解 #### 一、概述 在 Java 开发中,经常需要将项目打包成一个可执行的 JAR 文件,方便部署与分发。通过使用 Built Fat Jar 工具,可以轻松地将项目及其依赖项打包到一...
可执行JAR(Java Archive)文件是Java编程语言中的一种打包格式,用于集合多个类文件、资源和其他相关文件,形成一个单一的可分发单元。它不仅方便了代码的组织和传输,还允许我们直接运行Java应用程序,无需显式...
制作可执行的JAR文件包及jar命令详解 Java Archives(JAR)文件是一种Java特有的文档格式,类似于ZIP文件,但包含了一个META-INF/MANIFEST.MF文件,该文件是在生成JAR文件时自动创建的。JAR文件可以包含Java类、...
标题中的“集成小工具,可执行jar包”指的是一个包含了一系列工具的Java应用程序,这些工具被封装在一个可执行的JAR(Java Archive)文件中。JAR文件是Java平台特有的打包格式,它允许将多个Java类文件、资源文件...
### 可执行JAR包及JAR命令详解 在Java开发过程中,经常需要用到JAR(Java Archive)包来封装和管理代码、资源文件等。本文将深入探讨可执行JAR包的概念及其创建方法,并详细介绍`jar`命令的使用。 #### 1. JAR ...
"Eclipse制作可执行jar文件" 使用Eclipse制作可执行jar文件是初学者用户的需求之一。以下是详细的步骤和知识点: 一、Eclipse项目导出可执行jar文件 在Eclipse中,右击项目,选择Export,然后选择Java -> JAR ...
常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,...所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性。
如何打jar包,成为可执行jar。可以运行。
在Java编程环境中,将代码打包成可执行的JAR(Java Archive)文件是常见的做法,尤其对于命令行工具或小型应用程序。"可执行的jar全教程"提供了从基础到高级的指南,帮助开发者掌握如何创建、配置和运行这样的程序。...
制作可执行的JAR文件是JAR文件的主要用途之一,这使得Java程序可以像其他平台上的可执行文件一样被用户双击运行。为了创建可执行JAR,我们需要指定一个`MANIFEST.MF`文件,其中包含`Main-Class`属性,它指明了程序...
制作可执行的JAR文件是Java开发者经常遇到的任务,它允许我们将代码和资源打包成一个独立的可执行文件。下面将详细介绍三种制作可执行JAR文件的方法。 **方法一:使用WinRAR或WinZIP** 这种方法相对简单,适用于...
通过jar生成可执行的jar文件 将您要打包成jar的class文件放到D盘的temp目录下(也可以自定义) 在cmd命令行中键入如下指令: 1. 进入temp目录:cd tmep 2. 输入打包jar命令:jar -cvfe test.jar JFrameDemo3 . (点...
连连看双击可执行jar文件连连看双击可执连连看双击可执行jar文件行jar文件
标题中的“使用IntelliJ Idea 打包成可执行的JAR.pdf”指的是在IntelliJ IDEA这个集成开发环境中,如何将Java项目打包成一个可独立运行的JAR(Java Archive)文件。这个过程通常用于将Java应用程序整合到一个单一的...
Java可执行JAR(Java Archive)是Java编程语言中用于打包和分发应用程序的标准格式。它将类文件、资源文件和其他必要的元素集合到一个单一的文件中,方便部署和运行。这种格式允许开发者将所有依赖的类和资源打包在...