大家都知道一个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。
总结:
以上四种方法都可以用,特别是程序运行在非常单纯的环境中时。但是,如果是运行在多任务,多应用的环境中时,最好每个应用都能相互独立,第一种和第二种方案都有可能对其他应用产生影响,因此最好就是选择第三种和第四种。
分享到:
相关推荐
然而,对于不熟悉Java环境的用户来说,直接运行JAR文件可能不太方便,因为他们需要先安装Java运行环境(JRE)。为了解决这个问题,可以将JAR文件转换为Windows操作系统下的可执行文件(EXE),使得用户只需双击就能...
**运行JAR文件** 在Windows系统中,安装Java Runtime Environment (JRE)后,JAR文件会被关联到`javaw.exe`,使得用户可以直接双击运行。在命令行中,也可以使用以下命令来执行JAR文件: ``` java -jar test.jar ``` ...
Java的jar文件则包含了编译后的字节码,用于Java虚拟机(JVM)执行。要实现这一转换,我们需要借助一个名为IKVM的开源工具。 **IKVM工具详解:** IKVM是Java到.NET的桥梁,它实现了Java虚拟机和.NET Framework的互...
在Java中,一个可执行JAR文件通常包含一个主类,这个主类包含了程序的入口点,即`main`方法。执行命令是启动可执行JAR的关键,通过指定正确的命令行参数,可以在不同的操作系统上运行这些程序。 Java的JAR文件实际...
"Jar转Exe"的流程就是将Java的.jar文件转换为可以在Windows上直接运行的.exe文件,以便不依赖Java虚拟机(JVM)的用户也能方便地执行程序。 要将.jar文件转换为.exe文件,通常需要使用特定的工具,这些工具会创建一...
Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总 本文档将详细介绍 Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总。Java 是一种流行的编程语言,广泛应用于软件开发、Android 应用开发...
在Windows系统中,可以通过命令行来运行JAR文件。首先,确保已经安装了Java运行时环境(JRE)。然后,在命令提示符窗口输入以下命令: ```bash java -jar path_to_your_file.jar ``` 其中`path_to_your_file....
然而,Android系统并不直接执行`.jar`文件,而是需要将其转换为 Dalvik字节码,即`.dex`文件。`.dex`文件是专门为Dalvik虚拟机设计的,它是Android系统执行代码的基础。当一个Android应用被构建时,所有的`.jar`和`....
创建完成后,可以通过以下命令运行JAR文件: ``` java -jar cal.jar ``` 如果一切正常,程序将按照`MANIFEST.MF`中指定的主类开始执行。 5. **IDE中的JAR生成**: 在Eclipse或IntelliJ IDEA中,可以直接通过...
### 生成可执行JAR文件的详细教程 #### 一、引言 在Java开发过程中,经常需要将项目打包成可执行的JAR文件,以便于分发和部署。本教程将详细介绍如何通过CMD命令行生成一个可执行的JAR文件。 #### 二、准备工作 在...
JAR文件的出现使得Java开发者能够将多个类文件组合成一个单一的可执行文件,方便分发和执行。在Java开发过程中,经常需要对JAR文件进行反编译或者查看其内部结构,以便于学习、调试或分析代码。本文将详细介绍一款名...
标题中的“生成可双击运行的Jar文件”指的是在Java开发中将编译好的类文件打包成一个可执行的JAR(Java Archive)文件,这样用户可以通过双击该JAR文件来直接运行Java应用程序。这一过程涉及到Java的打包工具如jar...
制作可执行的JAR文件是JAR文件的主要用途之一,这使得Java程序可以像其他平台上的可执行文件一样被用户双击运行。为了创建可执行JAR,我们需要指定一个`MANIFEST.MF`文件,其中包含`Main-Class`属性,它指明了程序...
"jar包转换成exe可执行文件jar2exe"就是这样一个过程,它涉及将Java的.jar文件转换为Windows上的.exe文件。下面我们将深入探讨这个主题。 首先,.jar文件是Java的归档文件格式,它包含了类文件、资源和其他元数据,...
转换过程主要涉及将.txt内容打包到一个包含Java类的JAR文件中,这样.txt文件就成为JAR的一部分,可以在运行时访问。 在这个场景中,提供的压缩包文件包含三个元素: 1. PhBookJar.exe - 这是一个可执行文件,可能是...
将jar文件转换成.exe文件。将jar文件转换成双击就执行的可执行文件
这个过程将分为四个步骤:导出 jar 文件、运行 jar 文件、连同第三方文件一并导出至 jar 文件、将 jar 文件转换成 exe 可执行文件。 一、导出 jar 文件 在 MyEclipse 中,导出 jar 文件非常简单。首先,选中你的...