初学Java的人经常遇到的一个问题是:如果一个程序依赖某个文件夹下的一堆jar包,那么启动它的时候就需要在java -cp参数后面一个一个的加上jar包的名称,很不方便。
比如主程序类叫Main,在目录lib下有aaa.jar,bbb.jar,ccc.jar,则需要输入以下命令才能执行:java -cp lib/aaa.jar;lib/bbb.jar;/lib.ccc.jar Main
(linux系统下用冒号,windows下用分号)。
如果jar包少,倒也不是很麻烦,但如果依赖的jar包数量很多的话,一个个的输就比较麻烦了,当然我们也可以借助一些脚本或者Ant来实现自动化,但总觉得杀鸡焉用牛刀,反而把事情弄麻烦了。
我自己是这样解决的:
java -Djava.ext.dirs=./lib -cp ./bin Main (假设主程序类Mian.class放在bin目录下)
正如你说看到的,-Djava.ext.dirs起到了关键作用,它将告诉JVM从那里加载一些类,为了方便理解记忆,顺便补充一点ClassLoader的常识:
Java的类装载模型是一种代理(delegation)模型。当JVM 要求类装载器CL(ClassLoader)装载一个类时,CL首先将这个类装载请求转发给他的父装载器。只有当父装载器没有装载并无法装载这个类时,CL才获得装载这个类的机会。这样, 所有类装载器的代理关系构成了一种树状的关系。树的根是类的根装载器(bootstrap ClassLoader) , 在JVM 中它以"null"表示。除根装载器以外的类装载器有且仅有一个父装载器。在创建一个装载器时, 如果没有显式地给出父装载器, 那么JVM将默认系统装载器为其父装载器。
根(Bootstrap) 装载器:该装载器没有父装载器,它是JVM实现的一部分,从sun.boot.class.path装载运行时库的核心代码。
扩展(Extension) 装载器:继承的父装载器为根装载器,不像根装载器可能与运行时的操作系统有关,这个类装载器是用纯Java代码实现的,它从java.ext.dirs (扩展目录)中装载代码。(这一段就是为什么可以通过设置-Djava.ext.dirs来加载一堆jar的原理)
分享到:
相关推荐
运行jar文件时,Java虚拟机(JVM)会加载并执行其中的主类,这个主类通常由manifest文件指定,manifest文件是一个包含元数据的小文本文件,它告诉JVM哪个类应该作为程序的入口点。 描述中提到的“Demo中包括工程的...
4. **运行JAR包** 一旦JAR文件创建完毕,我们可以通过`java`命令运行它,指定 `-jar` 选项和JAR文件的路径。如果MANIFEST.MF正确指定了主类,那么Java会自动执行它。例如: ```bash java -jar myapp.jar ``` ...
* Class-Path:指定支持库的路径,"."表示程序运行目录,即导出的 JAR 包所在目录。 在准备好 MANIFEST.MF 文件后,需要使用 Eclipse 生成 JAR 文件。首先,右键单击项目名,在弹出菜单中选择“Export”。在弹出的...
9. **配置文件**:打包成.exe时,可能需要配置文件来指定Java虚拟机(JVM)参数,如内存设置、类路径等。 10. **发布与分发**:最后,确保发布的.exe文件包含了所有必要的库和资源,并且用户能够在没有Java环境的...
5. **类路径管理**:在Java命令行中,可以使用 `-classpath` 或 `-cp` 参数指定JAR包的位置,使得JVM知道在哪里寻找所需的类。 6. **运行时合并**:通过`-jar`选项,可以指定主类并直接运行JAR文件,如`java -jar ...
在 Java 开发中,为了方便程序的部署和分发,通常需要将程序打包成可执行的 JAR 文件。在这个过程中,需要注意几个重要的步骤,包括将依赖的 lib 包和配置文件正确地配置,生成 Class-Path 信息,并将其保存到 ...
完成上述步骤后,即可在任何地方运行依赖于`mysqlJdbc.jar`的Java程序,无需在命令行中指定额外参数。 #### 方法2:使用`-cp`或`-classpath`参数 另一种更为灵活的方法是在执行Java命令时动态指定JAR包位置,即使...
在Java开发过程中,将程序打包成可执行的...通过以上步骤,我们可以将Java程序打包成jar或exe文件,方便用户下载和运行,同时也提高了软件的分发效率。在实际操作中,根据项目需求选择合适的打包工具和策略至关重要。
标题提到的"JAVA SQLServer所需要的JAR包"正是指这些驱动程序库,它们使得Java应用程序能够通过SQL协议与SQL Server进行通信。在描述中提到了三个关键的JAR文件:`msbase.jar`,`mssqlserver.jar`,以及`msutil.jar`...
总的来说,"Java后台打开浏览器所用到的jar包"提供了一种便捷的方式来实现在Java后台程序中打开浏览器的功能,解决了`java.awt.Desktop`类在某些环境下的不足。通过理解这个jar包的工作原理和使用方式,开发者可以更...
5. **运行jar包**:一旦jar包创建完成,可以通过`java -jar`命令来运行包含主类的jar文件。例如: ``` java -jar myapp.jar ``` jar包还有其他用途,例如: - **库依赖**:许多开源项目会发布他们的代码为jar包...
以下是对如何使用MyEclipse将Java程序打成jar包的详细步骤及注意事项的解释: 1. **项目导出**: 在MyEclipse中,首先需要选择你要打包的Java项目。右键点击项目,在弹出的菜单中选择“Export”(导出)选项,这是...
打包Springboot项目到jar包: 1. 在IntelliJ IDEA中,打开项目。 2. 转到`Build`菜单,选择`Build Artifacts...`。 3. 如果尚未配置Artifacts,点击`+`添加一个新的Artifact,选择`JAR`,然后`From modules with ...
总之,打包Java程序至JAR文件并连接MySQL数据库,需要正确管理依赖,选择合适的打包工具,如Eclipse的Export功能,以及在必要时使用exe4j将其转换为可执行文件。同时,处理好数据库连接参数的存储和管理,确保程序的...
对于命令行编译和运行,确保在运行Java程序的目录中包含该jar文件,或者在`java`命令行中使用`-cp`或`-classpath`选项指定其位置。 2. **注册驱动**:在Java代码中,需要通过`Class.forName()`方法注册JDBC驱动。...
在Java编程中,有时我们需要动态地加载...总之,Java自动加载JAR文件并运行其中的类方法是一项实用的技术,它增强了Java程序的灵活性和可扩展性。通过理解和掌握这些技术,开发者能够构建出更加强大和灵活的应用系统。
1. **命令行**:如果你在命令行环境中运行Java程序,可以使用`-cp`或`-classpath`选项指定JAR文件的路径。 2. **IDE**:在像Eclipse、IntelliJ IDEA这样的集成开发环境中,可以在项目构建路径中添加外部JAR,IDE会...
在IT行业中,我们经常需要处理各种编程任务,其中之一就是在命令行环境下运行包含外部jar依赖的Java程序。在Windows操作系统中,我们通常会使用批处理(BAT)文件来自动化这一过程。下面将详细介绍如何通过BAT文件...
标题"所有要用到的jar包"表明这是一份包含了项目运行所需全部依赖的集合,而描述中提到的"项目6.5"可能是某个具体项目的版本,暗示这些`jar`包是为了解决该项目在运行时遇到的错误或缺失的依赖。 `jar`包的使用通常...
本文将详细介绍如何在运行JAR程序时添加虚拟机(VM)参数。 首先,让我们理解什么是VM参数。VM参数,即Java虚拟机参数,用于设置JVM的行为,包括内存分配、垃圾回收策略、性能监控等。这些参数以-D或-X开头,用于...