【原文地址】
http://longdick.iteye.com/blog/332580
大家都知道一个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包的方法(打包后运行好像不快)”:该标题指出文章将介绍如何生成Java应用程序的JAR包,并提到打包后的程序运行速度较慢的问题。 #### 描述解读: - **描述**:“在练习做orcl数据库比对工具时...
在Java开发中,有时我们需要对运行的JAR程序进行一些高级配置,比如调整虚拟机(JVM)的堆内存大小,开启远程监控等。本文将详细介绍如何在运行JAR程序时添加虚拟机(VM)参数。 首先,让我们理解什么是VM参数。VM...
Fat Jar是一种特殊的JAR文件格式,它可以将所有依赖项打包到一个JAR文件中,使得应用程序可以独立运行。但是,在某些情况下,Fat Jar生成的jar文件可能不能被正确地引用,导致应用程序无法正常运行。那么,如何解决...
在IT行业中,将Java项目打包成可执行的jar或exe文件是常见的需求,特别是对于希望在没有Java环境的用户机器上运行的应用程序。本篇主要介绍如何使用IntelliJ IDEA(Idea)将Springboot或Java项目打包为jar,并通过...
标题中的“可以直接运行java jar Demo”意味着这是一个Java应用程序的可执行jar文件,通常用命令`java -jar Demo.jar`即可在支持Java的环境中运行。这个Demo不仅包含了编译后的Java类,还可能包括了源代码,以便用户...
"可运行项目打包jar到exe应用程序" 本文将指导您一步一步地将Java项目打包成exe应用程序,并且无需考虑JDK环境问题,因为我们将JRE打包进去。这样,用户可以轻松地点击运行Java应用程序,不需要再担心JDK环境问题。...
在IT行业中,开发Java应用程序时,常常需要将项目打包成可执行的JAR(Java Archive)文件,以便在没有开发环境的机器上运行。对于基于JFinal的Web应用,这个过程可能会遇到一些挑战,因为JFinal是轻量级的Java Web...
要使 Spring MVC 能够独立运行,你需要一组特定的 JAR 包来提供核心功能、依赖管理和其他支持。以下是这些关键 JAR 包的作用和相关知识点: 1. **Spring Framework**: 这是 Spring MVC 的基础,包括 spring-context...
总之,Java调用Kettle通过引入相关jar包并利用其API,能够无缝地将强大的Kettle ETL功能集成到Java应用程序中,从而实现更复杂的业务逻辑和数据处理需求。这为开发人员提供了更大的灵活性,同时利用了Kettle的可视化...
JAVA打包成可运行的JAR程序 在 Java 开发中,为了方便程序的部署和分发,通常需要将程序打包成可执行的 JAR 文件。在这个过程中,需要注意几个重要的步骤,包括将依赖的 lib 包和配置文件正确地配置,生成 Class-...
在Java开发过程中,将项目打包成...总之,fat jar是解决Eclipse打包含第三方库问题的一种有效方法,通过整合所有依赖,使Java应用程序能够在任何环境中独立运行。了解和掌握这一技术,对于Java开发者来说是非常重要的。
"从网页Web上调用本地应用程序(.jar、.exe)的主流处理方法" 在做 web 应用的时候,我们经常会遇到在 web 中调用本地应用程序的问题,例如在 web 中点击一个按钮,然后打开自己写的或者别人的应用程序。这种方法可以...
本资源包含"struts2所有jar包程序文件",是开发者进行Struts2应用开发不可或缺的组件集合。 在Java Web开发中,jar(Java Archive)文件是一种归档格式,用于打包多个类文件和相关的元数据。Struts2框架的jar包通常...
### Launch4j 教程——JAR应用程序生成exe #### 一、介绍 Launch4j 是一款用于将 Java 应用程序(JAR 文件)封装为 Windows 本地可执行文件 (.exe) 的工具。它提供了丰富的功能,如本地弹出屏幕、应用程序图标定制...
总之,无论是通过修改环境变量还是在命令行中使用`-cp`参数,正确地引入外部JAR包对于构建功能完整的Java应用程序至关重要。掌握这些技巧,可以帮助开发者更高效地管理和利用外部库,提高项目的可维护性和扩展性。
springmvc独立运行jar包集合,经过测试可以运行,Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对Struts 2的超越。现在...
在Linux系统中,运行Java应用程序通常涉及到jar包的执行。本文将详细介绍在Linux环境下运行jar包的多种方式,以及相关的命令格式和原理。 首先,最常见的命令是`java -jar xxx.jar`,这种方式使得SSH终端被锁定,...
- 当JAR包依赖于其他库时,有两种方法运行: - 将所有JAR放在同一目录下,使用`-classpath`或`-cp`指定类路径: ```bash java -classpath a.jar;b.jar;c.jar;test.jar com.test.Test ``` - 在MANIFEST.MF中...
本文将详细介绍如何在Eclipse中将项目打包成JAR文件,并确保能正确引用外部JAR包和读取外部配置文件。 首先,我们来看如何打包项目为JAR。在Eclipse中,选择`Export` -> `Java` -> `Runnable JAR file`。在弹出的...
windows运行jar包指定jdk路径的脚本文件。可以不用系统的jdk运行,指定某个文件下的jdk运行jar包