`

项目部署:多个jar包加入到classpath

 
阅读更多

http://blog.csdn.net/wzygis/article/details/48750929

 

 

我们一般习惯用maven来管理、编译项目,部署的时候很少在服务器上再搭建一套maven环境。在部署项目时,需要将很多的依赖,多则上百个jar包加入到项目的库中。

 

一般来说,我们会想到将jar包添加到classpath目录中,过程如下:

 

1、转到配置文件的目录:cd etc

 

[html] view plain copy
  1. [root@db etc]# vi profile  

 

 

2、如果已经配置过java环境,找到代码块:

[html] view plain copy
  1. JAVA_HOME=/usr/java/jdk1.8.0_45  
  2. export HADOOP_PREFIX=/usr/local/hadoop  
  3. PATH=$JAVA_HOME/bin:$PATH:$HADOOP_PREFIX/bin  
  4. CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
  5. export JAVA_HOME  
  6. export PATH  
  7. export CLASSPATH  
  8. export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/  

 

 

3、在CLASSPATH后面逐个添加jar包。

[html] view plain copy
  1. 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

 

[html] view plain copy
  1. 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).  
  2.   
  3. Assuming that in our library, we have a class named Lib. And our application runs this code:  
  4.   
  5. public class Main {  
  6.     public static void main(String args[]) {  
  7.         System.out.println(System.getProperty("java.ext.dirs"));  
  8.         ClassLoader test_cl = Main.class.getClassLoader();  
  9.         ClassLoader lib_cl = Lib.class.getClassLoader();  
  10.         System.out.println(test_cl == lib_cl);  
  11.         System.out.println(test_cl);  
  12.         System.out.println(lib_cl);  
  13.     }  
  14. }  
  15. The console output will be:  
  16.   
  17. C:\Program Files\Java\jdk1.6.0\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext  
  18. true  
  19. sun.misc.Launcher$AppClassLoader@107077e  
  20. sun.misc.Launcher$AppClassLoader@107077e  
  21. when the application is run using the command java -cp "folder/*;." Main.  
  22.   
  23. However, when the application is run using the command java -Djava.ext.dirs=folder Main, then the output will instead be:  
  24.   
  25. folder  
  26. false  
  27. sun.misc.Launcher$AppClassLoader@107077e  
  28. 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

 

[html] view plain copy
  1. java  -Djava.ext.dirs=/usr/local/dependency  xx.Start  

xx.Start 为项目的main方法所在类。

 

 

3、另外一种方法是配置环境变量。

 

设置环境变量  变量名lib 变量值c:\java\axis-1_1\lib

 

 

[html] view plain copy
  1. java  -Djava.ext.dirs=%lib%  xx.Start  

 

4、可以在maven中设置启动Main方法启动类。

 

[html] view plain copy
  1. <plugin>    
  2.                     <groupId>org.apache.maven.plugins</groupId>    
  3.                     <artifactId>maven-jar-plugin</artifactId>    
  4.                     <version>2.4</version>    
  5.                     <configuration>    
  6.                         <archive>    
  7.                             <manifest>    
  8.                                 <addClasspath>true</addClasspath>    
  9.                                 <classpathPrefix>lib/</classpathPrefix>    
  10.                                 <mainClass>com.mobile263.cloudsimcdr.console.Start</mainClass>    
  11.                             </manifest>    
  12.                         </archive>    
  13.                     </configuration>    
  14.                 </plugin>  



配上参考文章,方便理解:

[html] view plain copy
  1. 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.  
  2. There is a neat trick - use the "java.ext.dirs" JVM param to point to the directory containing the jar files.  
  3. java-Djava.ext.dirs = c: \ java \ axis-1_1 \ lib-classpath classes MyJavaClass  
  4. Or set the environment variable variable name lib   
  5. Variable c: \ java \ axis-1_1 \ lib   
  6. java-Djava.ext.dirs =% lib%-classpath classes MyJavaClass  

 

分享到:
评论

相关推荐

    批量jar包加载入CLASSPATH脚本

    在进行Java程序开发及测试过程中,经常会遇到需要动态添加多个jar包至`CLASSPATH`的情况。特别是当项目依赖众多第三方库或者模块时,手动配置这些依赖不仅耗时且容易出错。为了解决这一问题,本文将详细介绍一个实用...

    东方通开发需要的jar包

    在使用这些jar包时,开发者需要将它们添加到项目的类路径(classpath)中,以便编译和运行时能够找到所需的类。对于Maven或Gradle等构建工具的用户,可以通过在pom.xml或build.gradle文件中指定依赖来自动管理这些...

    所有要用到的jar包

    5. **合并`jar`**:有时项目可能需要多个`jar`包,这时可以使用工具如`jar.exe`的`cvfM`命令,或第三方工具如One-Jar、FatJar等,将多个`jar`合并成一个,减少类路径的复杂性。 6. **库冲突**:多个`jar`包可能会...

    生成JAR包及包的运行.doc

    6. **涉及多个依赖的JAR包**: - 当JAR包依赖于其他库时,有两种方法运行: - 将所有JAR放在同一目录下,使用`-classpath`或`-cp`指定类路径: ```bash java -classpath a.jar;b.jar;c.jar;test.jar ...

    java语言开发jar包_jar包_java_

    Java语言开发中的JAR(Java Archive)包是Java平台特有的文件格式,用于打包多个类文件、资源文件以及元数据,便于分发、部署和运行。JAR文件本质上是一个ZIP压缩文件,包含了.class文件和其他相关资源,它使得Java...

    lib中的jar lib中的jar包

    - **合并jar**:通过`jar`命令可以将多个`jar`合并为一个,减少项目运行时的类加载复杂性。 **6. 打包成jar** - `jar cf jar-file input-file(s)`:创建新的`jar`文件,`c`表示创建,`f`表示指定文件名,`input-...

    java的jar包打包操作手册

    JAR 文件是 Java 应用程序的标准压缩文件格式,用于将多个文件组合成一个文件,以便于项目的部署和使用。JAR 文件可以包含类、图片、配置文件等多种类型的文件。 JAR 包的作用 JAR 文件的主要作用是方便用户快速...

    ant打jar包时, 怎么把所依赖的jar包与从源码中编译过来class文件合并成最终的一个jar?

    当我们有多个jar包相互依赖时,需要将它们合并成一个单一的jar,以便于部署和使用。Ant是一个流行的Java构建工具,它允许我们通过配置XML文件(build.xml)来执行自动化构建任务,包括jar文件的创建和合并。下面我们...

    jar包2jar包2jar包2jar包2jar包2

    标题中的“jar包2jar包2jar包2jar包2jar包2”可能是在强调jar包的重要性或者表示这是一个关于处理多个jar包的问题。描述中的重复同样表明了与jar包相关的主题,但没有提供具体细节,可能是涉及到jar包的合并、打包、...

    java Jar包

    6. **资源共享**:多个应用程序可以共享同一个JAR包,减少系统资源的占用。 7. **清单文件(Manifest File)**:JAR包内包含了一个MANIFEST.MF文件,记录了关于JAR的基本信息,如版本、主类等。 创建JAR包的步骤...

    jar包所在文件夹

    在IT行业中,jar(Java Archive)包是一种广泛使用的文件格式,主要用于封装Java类库,使得开发者可以将多个类文件、资源文件以及元数据打包在一起,便于分发和部署。本话题将聚焦于“jar包所在文件夹”,并讨论其中...

    spring boot 第三方jar包抽离方案

    尤其当引入多个第三方组件后,jar包的大小可能会达到100MB甚至更大,这给产品的部署和升级带来了极大的不便。因此,为了减小jar包的大小,提高部署效率,我们需要对Spring Boot应用中的第三方jar包进行抽离。 ### ...

    完整项目jar包 lib目录下

    2. **依赖管理**:在大型项目中,管理多个jar包依赖是个挑战。Maven和Gradle等构建工具提供了便捷的方式来管理和下载依赖,它们会自动处理jar包的依赖树,并将所有需要的库打包在一起。 3. **MANIFEST.MF**:这是每...

    java的jar包项目所用的jar包-50个.rar

    7. **多模块项目**:大型项目可能由多个JAR组成,每个JAR负责不同的功能模块。通过模块化,可以降低耦合度,提高代码的可维护性和重用性。 8. **服务提供者接口(SPI)**:Java提供了一种服务发现机制,即SPI。通过...

    Java_Jar包

    Java_Jar包是一种在Java开发中广泛使用的归档文件格式,它将多个类文件、资源文件和其他相关组件打包在一起,方便开发、部署和分发。这个压缩包文件包含了一系列常用的Java开发所需的jar库,旨在为开发者提供便利,...

    java开发jar包

    JAR文件在Java应用开发中扮演着至关重要的角色,它允许开发者将多个类文件组合成一个单一的可执行文件,这样可以减少网络传输的时间,提高程序的加载效率。 1. **JAR文件结构** JAR文件基于ZIP压缩格式,包含一个...

    jar包可用作编译器。

    Java Archive (JAR) 文件是Java平台上的一个特殊文件格式,它用于收集多个类文件、相关的元数据和其他资源(如图像、声音或文本文件)到一个单一的档案中。标题和描述提到“jar包可用作编译器”,实际上,这里可能指...

    java各种jar包集合

    Java开发过程中,jar(Java Archive)包是必不可少的组成部分,它们包含了预编译的类、资源文件以及元数据,使得开发者能够将多个类文件整合到一个单一的可移植格式中。"java各种jar包集合"这个资源可能是一个包含...

    基于Hadoop的分布式系统依赖的所有JAR包

    6. **启动与运行**:在部署Hadoop时,用户需要确保所有必要的JAR包都在类路径中,这通常通过修改`hadoop-env.sh`或`hadoop-classpath.sh`脚本来完成。然后,可以通过`start-dfs.sh`和`start-yarn.sh`命令启动HDFS和...

    openfire部署到eclipse少的3个jar包

    本文将详细介绍解决"openfire部署到eclipse少的3个jar包"这个问题的相关知识点。 首先,我们需要理解Java类库(JAR,Java Archive)在Java项目中的作用。JAR文件是Java平台特有的归档格式,用于打包多个类文件、...

Global site tag (gtag.js) - Google Analytics