http://blog.csdn.net/wzygis/article/details/48750929
我们一般习惯用maven来管理、编译项目,部署的时候很少在服务器上再搭建一套maven环境。在部署项目时,需要将很多的依赖,多则上百个jar包加入到项目的库中。
一般来说,我们会想到将jar包添加到classpath目录中,过程如下:
1、转到配置文件的目录:cd etc
- [root@db etc]# vi profile
2、如果已经配置过java环境,找到代码块:
- JAVA_HOME=/usr/java/jdk1.8.0_45
- export HADOOP_PREFIX=/usr/local/hadoop
- PATH=$JAVA_HOME/bin:$PATH:$HADOOP_PREFIX/bin
- CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- export JAVA_HOME
- export PATH
- export CLASSPATH
- export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/
3、在CLASSPATH后面逐个添加jar包。
- CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:xxxx1.jar:xxxx2.jar
分析一下,这样的配置方法相当于在程序中将参数写死,一旦jar包变更,得重新配置,很不灵活。
最近在stack overflow上发现一篇文章:
CLASSPATH vs java.ext.dirs http://stackoverflow.com/questions/5039862/classpath-vs-java-ext-dirs
- One difference is that if we specify our libraries under the -Djava.ext.dirs flag, they will be loaded using the extension classloader (e.g. sun.misc.Launcher.ExtClassLoader) instead of the system classloader (e.g. sun.misc.Launcher.AppClassLoader).
- Assuming that in our library, we have a class named Lib. And our application runs this code:
- public class Main {
- public static void main(String args[]) {
- System.out.println(System.getProperty("java.ext.dirs"));
- ClassLoader test_cl = Main.class.getClassLoader();
- ClassLoader lib_cl = Lib.class.getClassLoader();
- System.out.println(test_cl == lib_cl);
- System.out.println(test_cl);
- System.out.println(lib_cl);
- }
- }
- The console output will be:
- C:\Program Files\Java\jdk1.6.0\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
- true
- sun.misc.Launcher$AppClassLoader@107077e
- sun.misc.Launcher$AppClassLoader@107077e
- when the application is run using the command java -cp "folder/*;." Main.
- However, when the application is run using the command java -Djava.ext.dirs=folder Main, then the output will instead be:
- folder
- false
- sun.misc.Launcher$AppClassLoader@107077e
- sun.misc.Launcher$ExtClassLoader@7ced01
总结解决方法:java给我们提供了一个扩展jar包的参数配置参数:java.ext.dirs
1、利用maven导出全部的依赖jar包,请参考上一篇文章:
http://blog.csdn.net/wzygis/article/details/48735133 maven导出项目依赖的jar包
2、将依赖的jar包上传到的服务器后,放到一个目录下,比如:dependencies
- java -Djava.ext.dirs=/usr/local/dependency xx.Start
xx.Start 为项目的main方法所在类。
3、另外一种方法是配置环境变量。
设置环境变量 变量名lib 变量值c:\java\axis-1_1\lib
- java -Djava.ext.dirs=%lib% xx.Start
4、可以在maven中设置启动Main方法启动类。
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <archive>
- <manifest>
- <addClasspath>true</addClasspath>
- <classpathPrefix>lib/</classpathPrefix>
- <mainClass>com.mobile263.cloudsimcdr.console.Start</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
配上参考文章,方便理解:
- If U are in a hurry to compile code and there is a big list of Jar files to include in the classpath, there U don't have to struggle to include the names of all the jar's in the classpath.
- There is a neat trick - use the "java.ext.dirs" JVM param to point to the directory containing the jar files.
- java-Djava.ext.dirs = c: \ java \ axis-1_1 \ lib-classpath classes MyJavaClass
- Or set the environment variable variable name lib
- Variable c: \ java \ axis-1_1 \ lib
- java-Djava.ext.dirs =% lib%-classpath classes MyJavaClass
相关推荐
在进行Java程序开发及测试过程中,经常会遇到需要动态添加多个jar包至`CLASSPATH`的情况。特别是当项目依赖众多第三方库或者模块时,手动配置这些依赖不仅耗时且容易出错。为了解决这一问题,本文将详细介绍一个实用...
在使用这些jar包时,开发者需要将它们添加到项目的类路径(classpath)中,以便编译和运行时能够找到所需的类。对于Maven或Gradle等构建工具的用户,可以通过在pom.xml或build.gradle文件中指定依赖来自动管理这些...
5. **合并`jar`**:有时项目可能需要多个`jar`包,这时可以使用工具如`jar.exe`的`cvfM`命令,或第三方工具如One-Jar、FatJar等,将多个`jar`合并成一个,减少类路径的复杂性。 6. **库冲突**:多个`jar`包可能会...
6. **涉及多个依赖的JAR包**: - 当JAR包依赖于其他库时,有两种方法运行: - 将所有JAR放在同一目录下,使用`-classpath`或`-cp`指定类路径: ```bash java -classpath a.jar;b.jar;c.jar;test.jar ...
Java语言开发中的JAR(Java Archive)包是Java平台特有的文件格式,用于打包多个类文件、资源文件以及元数据,便于分发、部署和运行。JAR文件本质上是一个ZIP压缩文件,包含了.class文件和其他相关资源,它使得Java...
- **合并jar**:通过`jar`命令可以将多个`jar`合并为一个,减少项目运行时的类加载复杂性。 **6. 打包成jar** - `jar cf jar-file input-file(s)`:创建新的`jar`文件,`c`表示创建,`f`表示指定文件名,`input-...
JAR 文件是 Java 应用程序的标准压缩文件格式,用于将多个文件组合成一个文件,以便于项目的部署和使用。JAR 文件可以包含类、图片、配置文件等多种类型的文件。 JAR 包的作用 JAR 文件的主要作用是方便用户快速...
当我们有多个jar包相互依赖时,需要将它们合并成一个单一的jar,以便于部署和使用。Ant是一个流行的Java构建工具,它允许我们通过配置XML文件(build.xml)来执行自动化构建任务,包括jar文件的创建和合并。下面我们...
标题中的“jar包2jar包2jar包2jar包2jar包2”可能是在强调jar包的重要性或者表示这是一个关于处理多个jar包的问题。描述中的重复同样表明了与jar包相关的主题,但没有提供具体细节,可能是涉及到jar包的合并、打包、...
6. **资源共享**:多个应用程序可以共享同一个JAR包,减少系统资源的占用。 7. **清单文件(Manifest File)**:JAR包内包含了一个MANIFEST.MF文件,记录了关于JAR的基本信息,如版本、主类等。 创建JAR包的步骤...
在IT行业中,jar(Java Archive)包是一种广泛使用的文件格式,主要用于封装Java类库,使得开发者可以将多个类文件、资源文件以及元数据打包在一起,便于分发和部署。本话题将聚焦于“jar包所在文件夹”,并讨论其中...
尤其当引入多个第三方组件后,jar包的大小可能会达到100MB甚至更大,这给产品的部署和升级带来了极大的不便。因此,为了减小jar包的大小,提高部署效率,我们需要对Spring Boot应用中的第三方jar包进行抽离。 ### ...
2. **依赖管理**:在大型项目中,管理多个jar包依赖是个挑战。Maven和Gradle等构建工具提供了便捷的方式来管理和下载依赖,它们会自动处理jar包的依赖树,并将所有需要的库打包在一起。 3. **MANIFEST.MF**:这是每...
7. **多模块项目**:大型项目可能由多个JAR组成,每个JAR负责不同的功能模块。通过模块化,可以降低耦合度,提高代码的可维护性和重用性。 8. **服务提供者接口(SPI)**:Java提供了一种服务发现机制,即SPI。通过...
Java_Jar包是一种在Java开发中广泛使用的归档文件格式,它将多个类文件、资源文件和其他相关组件打包在一起,方便开发、部署和分发。这个压缩包文件包含了一系列常用的Java开发所需的jar库,旨在为开发者提供便利,...
JAR文件在Java应用开发中扮演着至关重要的角色,它允许开发者将多个类文件组合成一个单一的可执行文件,这样可以减少网络传输的时间,提高程序的加载效率。 1. **JAR文件结构** JAR文件基于ZIP压缩格式,包含一个...
Java Archive (JAR) 文件是Java平台上的一个特殊文件格式,它用于收集多个类文件、相关的元数据和其他资源(如图像、声音或文本文件)到一个单一的档案中。标题和描述提到“jar包可用作编译器”,实际上,这里可能指...
Java开发过程中,jar(Java Archive)包是必不可少的组成部分,它们包含了预编译的类、资源文件以及元数据,使得开发者能够将多个类文件整合到一个单一的可移植格式中。"java各种jar包集合"这个资源可能是一个包含...
6. **启动与运行**:在部署Hadoop时,用户需要确保所有必要的JAR包都在类路径中,这通常通过修改`hadoop-env.sh`或`hadoop-classpath.sh`脚本来完成。然后,可以通过`start-dfs.sh`和`start-yarn.sh`命令启动HDFS和...
本文将详细介绍解决"openfire部署到eclipse少的3个jar包"这个问题的相关知识点。 首先,我们需要理解Java类库(JAR,Java Archive)在Java项目中的作用。JAR文件是Java平台特有的归档格式,用于打包多个类文件、...