`

项目部署:多个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  

 

分享到:
评论

相关推荐

    maven的优缺点 项目

    将Service层以下的代码放到一个新创建的java项目中,在部署的时候将Service(java项目)打成一个jar包,分别放到两个web服务中;编译的时候让web项目依赖与Service(java项目)_source folder;配置麻烦,项目与项目之间的...

    iuhyiuhkjh908u0980

    JBPM文档1、 加入JBPM支持包下载jbpm-starters-kit-3.1.4在项目的classPath中加入jbpm-3.1.4.jar、jbpm-identity-3.1.2.jar、jbpm-webapp-3.1.2.jar,jbpm-3.1.4.jar必须加入,是JBPM的核心包;bpm-identity-3.1.2....

    ant1.9资源

    在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。 一. 安装与配置 下载地址:http://ant.apache.org/,在本文中下载的是1.7.0版本。解压到某个目录(例如E:"apache-ant-1.7.0),...

    Java通用代码生成实用程序XDoclet(源码包)

    XDoclet 提供了一个优秀的模板生成引擎,该引擎将模板转换成一个或多个支持文件。XDoclet 有一个模块装入程序,它动态地装入用 xdoclet.xml 文件(包含在模块的 jar 文件中)指定的 XDoclet 模块。 您无需创建模块...

    TR069-OPENACS服务器搭建.doc

    现在数据库装好了,需要将MySQL的JDBC驱动拷贝到JBOSS服务器的相应目录下,使得JB OSS可以在部署的项目中连接数据库: 将mysql-connector-java-5.1.18-bin.jar复制到C:\ Program File\jboss- 4.2.2.GA\server\...

    springboot参考指南

    部署到云端 i. 49. Cloud Foundry i. 49.1. 绑定服务 ii. 50. Heroku iii. 51. Openshift iv. 52. Google App Engine v. 53. 接下来阅读什么 8. VII. Spring Boot CLI i. 54. 安装CLI ii. 55. 使用CLI i. 55.1. ...

    疯狂JAVA讲义

    我把另一个构造器里的代码复制、粘贴到这个构造器里不就可以了吗? 143 5.6 类的继承 144 5.6.1 继承的特点 144 5.6.2 重写父类的方法 145 5.6.3 父类实例的super引用 146 学生提问:我们只是创建了一个Ostrich...

    JINI 核心技术

    一个JAR文件 68 5.2.7 小结 69 5.3 第一个Jini程序:Hello, World 69 5.3.1 实现服务代理 72 5.3.2 “包装”应用程序 73 5.3.3 使用发现和查找 75 5.3.4 其他细节 76 5.3.5 使用服务模板来寻找服务 78 5.3.6 查找一...

    JINI核心技术

    一个JAR文件 68 5.2.7 小结 69 5.3 第一个Jini程序:Hello, World 69 5.3.1 实现服务代理 72 5.3.2 “包装”应用程序 73 5.3.3 使用发现和查找 75 5.3.4 其他细节 76 5.3.5 使用服务模板来寻找服务 78 5.3.6 查找一...

    Spring-Reference_zh_CN(Spring中文参考手册)

    处理多个持久化单元 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与其他web框架的集成 ...

Global site tag (gtag.js) - Google Analytics