`
mabusyao
  • 浏览: 253361 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

执行JAR文件的一些问题(转)

    博客分类:
  • java
阅读更多
大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口。



具体的方法是修改jar包内目录META-INF下的MANIFEST.MF文件。



比如有个叫做test.jar的jar包,里面有一个拥有main函数的main class:test.someClassName

我们就只要在MANIFEST.MF里面添加如下一句话:

Main-Class: test.someClassName



然后我们可以在控制台里输入java -jar  test.jar即可以运行这个jar。



但是我们这个项目需要引用其他第三方的jar包,在eclipse里面以项目jar包的形式引用了这个叫做some.jar的包,当时放在项目的lib子目录下,最后项目打包时把这个some.jar也打进来了,但是用java -jar执行这个test.jar的时候报找不到Class异常,原因就是jar引用不到放在自己内部的jar包。



那怎么办?



运行时将其加入classpath的方式行不行?就是在运行jar的同时加入classpath参数:

java -classpath some.jar  -jar test.jar



这种方式是不行的,因为使用classpath指定的jar是由AppClassloader来加载,java 命令 加了-jar 参数以后,AppClassloader就只关注test.jar范围内的class了,classpath参数失效。



那该怎么引用其他的jar包呢?



方法一、使用Bootstrap Classloader来加载这些类。



我们可以在运行时使用如下参数:



-Xbootclasspath:完全取代系统Java classpath.最好不用。
-Xbootclasspath/a: 在系统class加载后加载。一般用这个。
-Xbootclasspath/p: 在系统class加载前加载,注意使用,和系统类冲突就不好了.
win32     java -Xbootclasspath/a: some.jar;some2.jar;  -jar test.jar
unix          java -Xbootclasspath/a: some.jar:some2.jar:  -jar test.jar
win32系统每个jar用分号隔开,unix系统下用冒号隔开







方法二、使用Extension Classloader来加载



你可以把需要加载的jar都扔到%JRE_HOME%/lib/ext下面,这个目录下的jar包会在Bootstrap Classloader工作完后由Extension Classloader来加载。非常方便,非常省心。:)







方法三、还是用AppClassloader来加载,不过不需要classpath参数了



我们在MANIFEST.MF中添加如下代码:

Class-Path: lib/some.jar



lib是和test.jar同目录的一个子目录,test.jar要引用的some.jar包就在这里面。

然后测试运行,一切正常!



如果有多个jar包需要引用的情况:

Class-Path: lib/some.jar lib/some2.jar

每个单独的jar用空格隔开就可以了。注意使用相对路径。



另:如果META-INF 下包含INDEX.LIST文件的话,可能会使Class-Path配置失效。INDEX.LIST是Jar打包工具打包时生成的索引文件,删除对运行不产生影响。





方法四、自定义Classloader来加载

这种方法是终极解决方案,基本上那些知名java应用都是那么干的,如tomcat、jboss等等。

这种方式有点复杂,需要专门开贴讨论。关于ClassLoader的原理和自定义ClassLoader可以参考这篇  http://longdick.iteye.com/blog/442213。





总结:

以上四种方法都可以用,特别是程序运行在非常单纯的环境中时。但是,如果是运行在多任务,多应用的环境中时,最好每个应用都能相互独立,第一种和第二种方案都有可能对其他应用产生影响,因此最好就是选择第三种和第四种。
分享到:
评论

相关推荐

    jar文件转exe可执行文件

    然而,对于不熟悉Java环境的用户来说,直接运行JAR文件可能不太方便,因为他们需要先安装Java运行环境(JRE)。为了解决这个问题,可以将JAR文件转换为Windows操作系统下的可执行文件(EXE),使得用户只需双击就能...

    JAR文件包及jar命令详解

    **运行JAR文件** 在Windows系统中,安装Java Runtime Environment (JRE)后,JAR文件会被关联到`javaw.exe`,使得用户可以直接双击运行。在命令行中,也可以使用以下命令来执行JAR文件: ``` java -jar test.jar ``` ...

    jar文件 变成dll

    Java的jar文件则包含了编译后的字节码,用于Java虚拟机(JVM)执行。要实现这一转换,我们需要借助一个名为IKVM的开源工具。 **IKVM工具详解:** IKVM是Java到.NET的桥梁,它实现了Java虚拟机和.NET Framework的互...

    可执行jar文件.以及执行命令

    在Java中,一个可执行JAR文件通常包含一个主类,这个主类包含了程序的入口点,即`main`方法。执行命令是启动可执行JAR的关键,通过指定正确的命令行参数,可以在不同的操作系统上运行这些程序。 Java的JAR文件实际...

    Jar转Exe.zip

    "Jar转Exe"的流程就是将Java的.jar文件转换为可以在Windows上直接运行的.exe文件,以便不依赖Java虚拟机(JVM)的用户也能方便地执行程序。 要将.jar文件转换为.exe文件,通常需要使用特定的工具,这些工具会创建一...

    Java打包成jar文件,以及将jar文件导出为exe文件方法汇总[汇编].pdf

    Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总 本文档将详细介绍 Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总。Java 是一种流行的编程语言,广泛应用于软件开发、Android 应用开发...

    jar文件如何打开或者jar文件关联到java

    在Windows系统中,可以通过命令行来运行JAR文件。首先,确保已经安装了Java运行时环境(JRE)。然后,在命令提示符窗口输入以下命令: ```bash java -jar path_to_your_file.jar ``` 其中`path_to_your_file....

    jar包转换dex和smali文件工具

    然而,Android系统并不直接执行`.jar`文件,而是需要将其转换为 Dalvik字节码,即`.dex`文件。`.dex`文件是专门为Dalvik虚拟机设计的,它是Android系统执行代码的基础。当一个Android应用被构建时,所有的`.jar`和`....

    如何生成可执行jar文件

    创建完成后,可以通过以下命令运行JAR文件: ``` java -jar cal.jar ``` 如果一切正常,程序将按照`MANIFEST.MF`中指定的主类开始执行。 5. **IDE中的JAR生成**: 在Eclipse或IntelliJ IDEA中,可以直接通过...

    生成可执行jar文件的教程

    ### 生成可执行JAR文件的详细教程 #### 一、引言 在Java开发过程中,经常需要将项目打包成可执行的JAR文件,以便于分发和部署。本教程将详细介绍如何通过CMD命令行生成一个可执行的JAR文件。 #### 二、准备工作 在...

    JAR文件读取工具

    JAR文件的出现使得Java开发者能够将多个类文件组合成一个单一的可执行文件,方便分发和执行。在Java开发过程中,经常需要对JAR文件进行反编译或者查看其内部结构,以便于学习、调试或分析代码。本文将详细介绍一款名...

    生成可双击运行的Jar文件

    标题中的“生成可双击运行的Jar文件”指的是在Java开发中将编译好的类文件打包成一个可执行的JAR(Java Archive)文件,这样用户可以通过双击该JAR文件来直接运行Java应用程序。这一过程涉及到Java的打包工具如jar...

    JAR文件包详解,创建可执行jar

    制作可执行的JAR文件是JAR文件的主要用途之一,这使得Java程序可以像其他平台上的可执行文件一样被用户双击运行。为了创建可执行JAR,我们需要指定一个`MANIFEST.MF`文件,其中包含`Main-Class`属性,它指明了程序...

    jar包转换成exe可执行文件jar2exe

    "jar包转换成exe可执行文件jar2exe"就是这样一个过程,它涉及将Java的.jar文件转换为Windows上的.exe文件。下面我们将深入探讨这个主题。 首先,.jar文件是Java的归档文件格式,它包含了类文件、资源和其他元数据,...

    txt文本文件转换成jar文件

    转换过程主要涉及将.txt内容打包到一个包含Java类的JAR文件中,这样.txt文件就成为JAR的一部分,可以在运行时访问。 在这个场景中,提供的压缩包文件包含三个元素: 1. PhBookJar.exe - 这是一个可执行文件,可能是...

    将jar文件转换成exe文件工具

    将jar文件转换成.exe文件。将jar文件转换成双击就执行的可执行文件

    15分钟学会MyEclipse导出jar文件再装换成exe可执行文件

    这个过程将分为四个步骤:导出 jar 文件、运行 jar 文件、连同第三方文件一并导出至 jar 文件、将 jar 文件转换成 exe 可执行文件。 一、导出 jar 文件 在 MyEclipse 中,导出 jar 文件非常简单。首先,选中你的...

Global site tag (gtag.js) - Google Analytics