可执行jar包

我已经解决了这个问题,在eclipse中有一个打包工具,可以将程序打包成.jar文件:
右键要打包的
project--->Export--->Java--->JAR file--->Next--->Browse设
置.jar文件存放的目的路径--->Next--->Next--->点Main class 边上的Browse,选择该
project的主类,--->finish,就OK了,打包完成。

最近研究了如何在Java工程打包,期间遇到的一些问题进行总结,如打包成test.jar 文件

Manifest-Version: 1.0
Main-Class: windows.VideoWindow
Class-Path: lib\jetty-6.1.26.jar lib\aspectjweaver-1.6.12.jar

上面为打包为jar中的包说明文件. 下面这个报错一直出现.
could not find main class. Program will exit
这个错误提示其实不是没有发现main class. 而是jar如果有错误执行不了,就会出现这个错误. 打包完成后, 要先运行 cmd ->
java -jar your.jar 确认没有问题即可执行jar. 使用-jar参数后, 系统的Classpath 变量不再起作用.
虚拟机将去MANIFEST.MF中的Class-Path 下找相关的包.

然后才能成功的从: windows.VideoWindow 的main方法进入. 否则没有相关连接包,则会提示找不到main class. 而大家可能还迷糊的找不到北. 明明有main class吗.

如果这个写的不对. 则就会一直报错.
看看上面这个Class-Path: 后面的写法. 空格分开. 绝对不能有分号.切记.

最后必须有换行. 这个也是要注意的. 否则依然提示没有mainclass.

不要因为这个小事情耽误了时间. 其中 lib/ 表示这个jar必须在打包Test.jar所在目录的一个lib子目录中.

运行jar需要命令: java -jar Test.jar
双击也可以, 则使用 javaw 打开.

关于java -classpath a.jar;b.jar; class
test.Test 执行时. a.jar;b.jar; 后面都必须有分号. 否则报错. 不要指望不写classpath让系统自己找.
这不是在eclipse里面.必须写上你要使用的类. 否则总会提示您编译出错.

2、MANIFEST.MF 文件中奇怪的分行和空格要求

工作中发现的一个非常奇怪也很有趣事情,有关MANIFEST.MF文件中的分行和空格的格式要求,分享给大家。

对于通常的MANIFEST.MF文件,一般格式是:

Class-Path: lib/a.jar lib/b.jar lib/c.jar lib/d.jar lib/e.jar lib/f.jar
    在一行之内将所有的jar包路径写上,空格分隔即可。

但是对于一些大型的项目,因为依赖包众多,比如大于30个,那么如果还写在一行内,就会出现一个长度惊人的行。程序运行倒不会有任何问题,但是对于版本控
制就很不友好,如增加或者减少一个依赖包,这行就会被改写。以后compare不同版本时,只能知道这行被修改了确无法直接知道是做了什么修改,必须通过
其他方式才能对比出来。

同样的问题发生在code merge时,如果两个分支都修改了这个文件,就必须通过手工来进行merge,而且要对照出来彼此到底改了什么,很困难而且容易出错。

因此一个改进就是将这个文件中的依赖按照一行一个依赖的方式重写,这样以后修改时只会修改改依赖所在的行,很容易就对比出来具体做了哪些感动,code merge时版本控制软件一般也很容易直接自动merge成功。

修改后的文件类似如下:

Class-Path: lib/a.jar
    lib/b.jar
    lib/c.jar
    lib/d.jar
    lib/e.jar
    lib/f.jar

但是在实际操作时发生了意料之外的问题,会出现异常或者类无法找到,经检查发现问题出现在MANIFEST.MF的格式上,MANIFEST.MF对于分行和空格是有特殊要求的:

1. 每行的最后一个jar的名称后不容许有空格
    即"    lib/b.jar"在b.jar后必须回车结束本行,不能有空格,一个都不能

2. 每行的开头必须有不少于2个空格
    即"    lib/b.jar"在b.jar前必须有不下两个空格

以上两个条件有一个不满足都会出现问题,有点古怪。

3、严格的MANIFEST.MF格式
今天才发现这个文件的格式要求比较严格,因为使用的包比较多,所以那个Class-path的内容就比较多,我全部放在了一行,结果服务器启动读取那个文
件的时候报错,错误信息是行太长,把它们切成多行,结果又是无效的头字段(java.io.IOException: invalid header
field),和工程里面的其它文件比较了下,发现换行后要在前面加一个空格,后来又发现明明包含了一个包,但是找不到类,又在每行的后面加了一个空格,
这下才完全搞定。

时间: 2024-10-13 02:39:37

可执行jar包的相关文章

Java项目生成可执行jar包、exe文件以及在Windows下的安装文件

1.如何通过eclipse将Java项目生成可执行jar包 首先把在eclipse下的java项目导出jar file 下一步 下一步 下一步 最后点击完成,便生成了可执行的jar文件.可以在刚刚选择导出目录的文件夹中找到. 2.将刚刚生成的jar文件导出可执行的.exe文件,首先安装exe4j软件,下载地址如下:http://www.jb51.net/softs/541579.html,下载后安装破解.打开界面如下 直接下一步,选择第二个 下一步 下一步 如果要在64位下运行,则要点击下面那个

用指定jdk执行jar包

在运行jar包前执行以下命令,作用是在当前命令行窗口作用域内修改环境变量: export JAVA_HOME=/root/jiabao.gao/Hbase2Redis-1.0.0-SNAPSHOT/jdk1.7.0_55export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport MAX_LOCKED_MEMORY=unlimitedG 执行后用exp

Java打包可执行jar包 包含外部文件

外部文件在程序中设置成相对当前工程路径,执行jar包时,将外部文件放在和jar包平级的目录. 1 public class Main { 2 3 4 public static void main(String[] args) throws IOException, InterruptedException { 5 6 String a=args[0]; 7 8 String b=args[1]; 9 10 String c=args[2]; 11 12 String[] cmd=new Str

Gradle构建可执行Jar包(转载请注明出处)

最近开始接触Java,认识到一个似乎比Maven好用的构建工具Gradle,还来不及细细研究,但是需要构建一个可执行Jar包.上网查了一下.中文的文章千篇一律的提到一个插件apply plugin: 'executable-jar' (https://github.com/stigkj/gradle-executable-jar-plugin) ,也不知道是谁复制了谁的. 但是构建的时候不认这个插件,所以寻找其他方法. 用压缩软件打开Eclipse生成的可执行Jar包与Gradle构建的Jar包

Intellijidea 打可执行jar包

工作中使用intellijidea 16将一个java程序打包成可执行jar包时出现问题, Error: Invalid or corrupt jarfile project.jar 的问题,无法运行jar包 解决方法: 我的最终要求是将程序和外部依赖打成一个可运行的jar包,而不是将程序和依赖分开,所以,在File -> project Structure 选择Artifacts,点击+,选择jar,选择From modules with Dependencies. 出来如下图: 在Main

eclipse生成可执行jar包[转]

相信大家在开发java的时候一定会遇到要求将java工程打包成可运行的jar的需求,今天我在这篇博客中详细讲解一下生成可运行jar的两种方法,亲测完全可行. 1. 工程中不包含第三方的jar包 这种情况比较简单,选中需要生成jar的工程,右击-->Export,出现如下的窗口 选中java--- > JAR file,出现如下窗口, 此处要: 选中 Export generated class files and resources: 选中 Compress the contents of t

IntelliJ IDEA导出Java 可执行Jar包

原文:IntelliJ IDEA导出Java 可执行Jar包 保证自己的Java代码是没有问题的,在IDEA里面是可以正常运行的,然后,按下面步骤: 打开File -> Project Structure -> Artifacts,如下图 IDEA导出Java 可执行Jar包" title="IntelliJ IDEA导出Java 可执行Jar包"> 点击"+",选择"Jar",选择Empty或From modules

运行可执行jar包出错

用maven创建的项目(可执行jar包),用eclipse开发过程中没问题,但是通过控制台java -jar指令执行出现以下错误:Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema

eclipse导出可执行jar包 报main function not found错误

eclipse导出可执行jar包 报main function not found错误,解决方法是在工程的properties中找到run debug设置main方法.

maven项目用assembly打包可执行jar包

该方法只可打包非spring项目的可执行jar包,spring项目可参考:http://www.cnblogs.com/guazi/p/6789679.html 1.添加maven插件: <!-- Maven Assembly Plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactI