`

可执行JAR制作样例

阅读更多

      结论:制作可执行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


但问题依旧未解决,处理中~~

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics