`

java命令执行jar包的方式

    博客分类:
  • java
 
阅读更多

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

 

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

 

比如有个叫做test.jarjar包,里面有一个拥有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://cuixiaodong214.blog.163.com/blog/static/951639820099135859761

 

总结:

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

分享到:
评论

相关推荐

    关于执行java命令引入外部jar包方法

    ### 二、执行Java命令引入外部JAR包的方法 #### 方法1:修改系统环境变量 最常见的方式是通过修改系统环境变量`CLASSPATH`来添加外部JAR包。`CLASSPATH`环境变量告诉JVM在哪里可以找到用户自定义的类和资源。例如...

    java命令执行jar包的多种方法(四种方法)

    Java 命令执行 JAR 包的多种方法 Java 命令执行 JAR 包是一种常见的应用场景,在实际开发中,我们经常需要执行 JAR 包文件。那么,如何使用 Java 命令执行 JAR 包呢?本文将为大家介绍四种不同的方法,每种方法都有...

    java配置数据库jar包操作

    Java 配置数据库 Jar 包操作 Java 配置数据库 Jar 包操作是指在 Java 项目中将 MySQL 数据库的 Jar 包导入到项目中,以便使用 JDBC 连接数据库的操作。下面是关于 Java 配置数据库 Jar 包操作的详细知识点: 什么...

    编译运行java带jar包

    4. **运行JAR包** 一旦JAR文件创建完毕,我们可以通过`java`命令运行它,指定 `-jar` 选项和JAR文件的路径。如果MANIFEST.MF正确指定了主类,那么Java会自动执行它。例如: ```bash java -jar myapp.jar ``` ...

    jarjar-方便Java打包工具,自定义修改jar包包名

    通过阅读这个文件,开发者可以了解到如何创建规则文件,设置各种指令,以及如何运行jarjar命令。这对于初学者来说是快速上手的关键。 使用jarjar的基本步骤包括: 1. **编写规则文件**:规则文件是一个XML或文本...

    java打包成jar

    根据提供的信息,本文将详细介绍如何通过不同方式将Java程序打包成可执行的JAR文件。 #### 使用`jar`命令手动打包 1. **准备工作**:首先确保所有的`.class`文件位于同一个目录下,例如`D:/chat/`。 2. **创建...

    java通用jar包

    Java通用jar包是一种在Java开发中广泛使用的可重用代码库,它包含了预编译的类和资源,便于开发者在自己的项目中导入和使用。jar(Java Archive)是Java平台的标准打包格式,允许将多个Java类文件和其他资源文件集合...

    java打包为jar

    **运行JAR文件** 创建完可执行的JAR文件后,可以通过以下命令运行: ```bash java -jar YourJar.jar ``` 注意,如果JAR包含外部依赖,需要确保类路径设置正确,或者使用包含依赖的JAR方式运行。 总的来说,将Java...

    如何生成jar包

    最终,生成JAR包后,可以通过Java命令来运行JAR文件。假设清单文件中定义了主类,可以简单地使用命令:`java -jar Crazyit.jar`来运行程序。 此外,一个完整的Java开发环境还可能涉及到其他构建工具,例如Maven或...

    java_jar包

    1. 运行JAR:通过`java -jar jar_file_name`命令运行已指定主类的JAR文件。 2. 导入JAR:在Java项目中,可以通过`<classpath>`元素在构建路径中添加JAR,或者使用`Class.forName()`和`ClassLoader`来动态加载JAR中的...

    JAVA打成jar包

    以下是对“JAVA打成jar包”这一主题的详细解析。 1. **JAR文件结构**: - **MANIFEST.MF**:每个JAR文件都包含一个清单文件,它定义了入口点(启动应用的主类)和其他重要属性。 - **Class Files**:Java源代码...

    JAR命令&JAR包详解.doc

    ### JAR命令与JAR包详解 #### 一、JAR包概述 JAR(Java ARchive)包是Java平台特有的一种压缩文件格式,主要用于将多个Java类文件和其他资源文件打包成一个单独的文件。它类似于常见的ZIP格式,但具有更高级的功能...

    java jar包查看工具

    Java的JAR(Java Archive)文件是Java平台特有的打包格式,用于集合多个类文件、资源文件等,并且可以通过Java的`java -jar`命令来执行。在开发和维护Java项目时,经常需要查看JAR包内部的内容,尤其是类文件(....

    将java文件打包成 jar jar命令详解

    JAR(Java Archive)是 Java 开发工具包 (JDK) 中的一个实用程序,用于将多个 Java 类文件和其他资源文件打包成一个 JAR 文件。JAR 文件不仅便于分发和部署,还支持对文件进行压缩,减少文件大小。 #### 二、JAR ...

    java 编译 jar 包

    ### Java 编译 Jar 包知识点...通过上述分析可以看出,`jar`命令提供了非常灵活的方式来创建、管理Jar文件,这对于Java开发者来说是一项非常实用的技能。了解并掌握这些命令的使用方法对于提高开发效率具有重要意义。

    java开发常用jar包

    下面将详细阐述Java开发中JAR包的用途、创建、使用以及常见的一些jar包类型。 1. **JAR文件的用途**: - **代码打包**:将多个`.class`文件打包成一个JAR文件,便于分发和运行。 - **资源整合**:除了包含类文件...

    java集成kettle相关jar包

    在Java项目中使用Kettle时,通常需要将Kettle的相关库(jar包)引入到项目的构建路径中。然而,有时我们可能无法直接从Maven仓库获取这些依赖,这时就需要手动处理。 首先,让我们来看看`pom.xml`文件的作用。在...

    生成JAR包的方法(打包后运行好像不快)

    8. **批处理文件运行JAR**:为了方便运行JAR包,可以创建一个批处理文件(.bat文件),其中包含运行JAR包所需的命令和参数,例如: ```batch @echo off rem Set BQ_IBS_HOME before running this script. rem if...

    java程序打jar包

    打包完成后,可以通过命令行使用`java -jar jarfile.jar`命令来运行JAR文件。如果在MANIFEST.MF中指定了主类,Java虚拟机会自动加载并执行。 8. **注意事项**: - 确保所有依赖的库都被包含在JAR文件中,或者在...

    可以直接运行java jar Demo

    运行jar文件时,Java虚拟机(JVM)会加载并执行其中的主类,这个主类通常由manifest文件指定,manifest文件是一个包含元数据的小文本文件,它告诉JVM哪个类应该作为程序的入口点。 描述中提到的“Demo中包括工程的...

Global site tag (gtag.js) - Google Analytics