结论:制作可执行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
但问题依旧未解决,处理中~~
分享到:
相关推荐
CMD 生成可执行jar文件的教程 生成可执行jar文件的教程
可执行JAR包及JAR命令详解 可执行JAR包及JAR命令详解 可执行JAR包及JAR命令详解
使用Built Fat Jar 制作可执行jar , 图文并茂 第一步,选中项目根节点后,点击右键,在弹出菜单中选择Build Fat Jar第二步,设置Jar-Name这是生成的jar文件名称 第三步、选择要打包的已编译的class文件 第四步、点击...
绝对可行,图解MyEclipse8.5安装fatjar以及制作可执行jar方法!
可执行jar包. 博文链接:https://taiyuan.iteye.com/blog/37494
常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,...所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性。
如何打jar包,成为可执行jar。可以运行。
使用Eclipse制作可执行jar文件
制作可执行的JAR文件包及jar命令详解 ,初学者可以边看边学习
maven打jar包方法 并且java -jar *.jar可执行
制作可执行jar文件【3中方法】
通过jar生成可执行的jar文件 将您要打包成jar的class文件放到D盘的temp目录下(也可以自定义) 在cmd命令行中键入如下指令: 1. 进入temp目录:cd tmep 2. 输入打包jar命令:jar -cvfe test.jar JFrameDemo3 . (点...
连连看双击可执行jar文件连连看双击可执连连看双击可执行jar文件行jar文件
本资源为压缩包,解压后得到可执行jar包 与程序配置文件,可直接运行。ZK可视化工具 ZKUI2. 本资源为压缩包,解压后得到可执行jar包 与程序配置文件,可直接运行。ZK可视化工具 ZKUI2. 本资源为压缩包,解压后得到...
可执行的JAR文件包 常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可...所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性。
Java入门-生成可执行jar文件的教程,让你轻松学会jave的基本编程!
开发完毕,部署的时候,将开发的class打成一个可执行jar包,会发现通过Class.forName(String classname) 或ClassLoader.getSystemClassLoader().loadClass(String classname)来动态载入存在于第三方jar包中的class会抛...
可java工程打成可执行jar包 将java工程打成可执行jar包
包含菜刀的最新版源码和可执行jar文件,双击打开直接就是中文版,不需要汉化