maven 将本地jar包打入jar包中

有关MAVEN仓库的理解参见:http://blog.csdn.net/wanghantong/article/details/36427433

MAVEN依赖关系中Scope的作用

Java代码   收藏代码
  1. Dependency Scope 在POM 4中,中还引入了,它主要管理依赖的部署。目前依赖项的作用域可以使用5个值:    
  2. 在定义项目的依赖项的时候,我们可以通过scope来指定该依赖项的作用范围。scope的取值有compile、runtime、test、provided、system和import。  
  3. compile:这是依赖项的默认作用范围,即当没有指定依赖项的scope时默认使用compile。compile范围内的依赖项在所有情况下都是有效的,包括运行、测试和编译时。  
  4. runtime:表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。  
  5. test:表示该依赖项只对测试时有用,包括测试代码的编译和运行,对于正常的项目运行是没有影响的。  
  6. provided:表示该依赖项将由JDK或者运行容器在运行时提供,也就是说由Maven提供的该依赖项我们只有在编译和测试时才会用到,而在运行时将由JDK或者运行容器提供。  
  7. system:当scope为system时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。指定scope为system需要与另一个属性元素systemPath一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。  

 

Java代码   收藏代码
  1. POM文件里面可以引用一些内置属性(Maven预定义可以直接使用)  
  2.   
  3. ${basedir} 项目根目录   
  4. ${version}表示项目版本;  
  5. ${project.basedir}同${basedir};  
  6. ${project.version}表示项目版本,与${version}相同;  
  7. ${project.build.directory} 构建目录,缺省为target  
  8. ${project.build.sourceEncoding}表示主源码的编码格式;  
  9. ${project.build.sourceDirectory}表示主源码路径;  
  10. ${project.build.finalName}表示输出文件名称;  
  11. ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes  

 

如何在Maven项目中引入本地包呢?

比如我从其它项目打一个jar包,引入到现有项目中。

方法一:将待引入的包放在目录下如lib目录下,修改pom文件,加入依赖并且scope要设置为system

 

Java代码   收藏代码
  1.   
  2.       
  3.         com.fbcds  
  4.         fbcds  
  5.         1.0  
  6.         system  
  7.         ${project.basedir}/lib/fbcds.jar  
  8.       
  9.   

 


 上面设置完成后,运行mvn package命令执行成功。但打出来的包里面不包含lib目录和fbcds.jar这个引用的包,即打出来的包不是可执行的jar。所以个人开发的话可以使用这种方式,如果团队开发请使用方法二。

 

方法二:将待引入的jar包安装到本地repository中

1、先把待引入的jar包放在一个目录下,需要改一下包名,如fbcds.jar修改成fbcds-1.0.jar,如F:\lib目录,在命令行CD到lib目录,执行以下命令:

Java代码   收藏代码
  1. mvn install:install-file -Dfile=fbcds-1.0.jar -DgroupId=fbcds -DartifactId=fbcds -Dversion=1.0 -Dpackaging=jar  
  2. mvn install:install-file -Dfile=ojdbc7-1.0.jar -DgroupId=ojdbc7 -DartifactId=ojdbc7 -Dversion=1.0 -Dpackaging=jar  

 2、修改项目pom文件加入包对应的依赖

 

Java代码   收藏代码
  1.   
  2.       
  3.       log4j  
  4.       log4j  
  5.       1.2.17  
  6.       
  7.       
  8.       fbcds  
  9.       fbcds  
  10.       1.0  
  11.       
  12.        
  13.       ojdbc7  
  14.       ojdbc7  
  15.       1.0   
  16.       
  17.     

 上面的fbcds和ojdbc7就是新加的引用包的依赖。

 完成后,在本地仓库可看到对应的文件夹内容:



 

MAVEN如何打可执行的JAR包

前提条件:已成功将待引入的jar包安装到本地repository中

方法一、使用maven-shade-plugin插件打可执行的jar包

插件查找链接:http://maven.apache.org/plugins/

1、测试类代码

 

Java代码   收藏代码
  1. package com.lwf.test;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8.   
  9. import com.eclink.fbcis.store.StoreDao;  
  10.   
  11. public class TestClass {  
  12.     public static void main(String[] args) {  
  13.         StoreDao a = new StoreDao();  
  14.         System.out.println("------" + a.toString());  
  15.         Connection con = null;  
  16.         Statement st = null;  
  17.         ResultSet rs = null;  
  18.         try {  
  19.             String sql = "select * from temp_head where temp_no='C530015I19008015'";  
  20.             Class.forName("oracle.jdbc.driver.OracleDriver");  
  21.             con = DriverManager.getConnection("jdbc:oracle:thin:@//10.101.2.19:1521/pdbqmytcis","qmytcis","qmytcis123");  
  22.             st = con.createStatement();  
  23.             rs = st.executeQuery(sql);  
  24.             if(rs.next()){  
  25.                 System.out.println(rs.getString("temp_no"));  
  26.             }  
  27.               
  28.         } catch (Exception e) {  
  29.             e.printStackTrace();  
  30.         } finally{  
  31.             try {  
  32.                 rs.close();  
  33.                 st.close();  
  34.                 con.close();  
  35.             } catch (SQLException e) {  
  36.                 e.printStackTrace();  
  37.             }  
  38.         }  
  39.     }  
  40. }  

 上面类中引用到了fbcds和ojdbc7包的内容。

2、对应pom文件

Java代码   收藏代码
  1. "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  2.   4.0.0  
  3.   222  
  4.   222  
  5.   0.0.1-SNAPSHOT  
  6.   222  
  7.     
  8.       
  9.       log4j  
  10.       log4j  
  11.       1.2.17  
  12.       
  13.       
  14.       fbcds  
  15.       fbcds  
  16.       1.0  
  17.       
  18.        
  19.       ojdbc7  
  20.       ojdbc7  
  21.       1.0   
  22.       
  23.     
  24.       
  25.           
  26.               
  27.                 org.apache.maven.plugins  
  28.                 maven-shade-plugin  
  29.                 2.4.3  
  30.                   
  31.                       
  32.                         package  
  33.                           
  34.                             shade  
  35.                           
  36.                           
  37.                               
  38.                                 "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">  
  39.                                     com.lwf.test.TestClass  
  40.                                   
  41.                               
  42.                           
  43.                       
  44.                   
  45.               
  46.           
  47.       
  48.   
  49.   

 在eclipse中右键项目run as 选择Maven package,可看打包的target目录内容:



 比较两个包内容:



 执行包:cmd下



 original-MavenPackage-0.0.1-SNAPSHOT.jar中没有主清单属性是执行不了的。

 参见:http://www.mkyong.com/maven/create-a-fat-jar-file-maven-shade-plugin/

方法二、使用maven-assembly-plugin插件打可执行的jar包

测试类与方法一中一样,只是pom不一样,pom文件如下:

Java代码   收藏代码
  1. "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  2.   4.0.0  
  3.   com.lwf.MavenPackage  
  4.   MavenPackage  
  5.   0.0.1-SNAPSHOT  
  6.   MavenPackage  
  7.     
  8.       
  9.       log4j  
  10.       log4j  
  11.       1.2.17  
  12.       
  13.       
  14.       fbcds  
  15.       fbcds  
  16.       1.0  
  17.       
  18.        
  19.       ojdbc7  
  20.       ojdbc7  
  21.       1.0   
  22.       
  23.     
  24.       
  25.           
  26.   
  27.                
  28.   
  29.   
  30.               
  31.                 org.apache.maven.plugins  
  32.                 maven-assembly-plugin  
  33.                 2.6  
  34.                   
  35.                       
  36.                       
  37.                         jar-with-dependencies  
  38.                       
  39.                       
  40.                       
  41.                         
  42.                         com.lwf.test.TestClass  
  43.                         
  44.                       
  45.                   
  46.                   
  47.                     
  48.                     make-assembly  
  49.                     package   
  50.                       
  51.                         single  
  52.                       
  53.                     
  54.                   
  55.               
  56.           
  57.       
  58.   
  59.   

 修改完pom后,在eclipse中右键项目run as 选择Maven package,可看打包的target目录内容:



 两个jar文件比较:



 



 

 参见:http://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/

方法三、使用onejar-maven-plugin插件打可执行的jar包

测试类与方法一中一样,只是pom不一样,pom文件如下:

Java代码   收藏代码
  1. "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  2.   4.0.0  
  3.   com.lwf.MavenPackage  
  4.   MavenPackage  
  5.   0.0.1-SNAPSHOT  
  6.   MavenPackage  
  7.     
  8.       
  9.       log4j  
  10.       log4j  
  11.       1.2.17  
  12.       
  13.       
  14.       fbcds  
  15.       fbcds  
  16.       1.0  
  17.       
  18.        
  19.       ojdbc7  
  20.       ojdbc7  
  21.       1.0   
  22.       
  23.     
  24.       
  25.           
  26.   
  27.                
  28.   
  29.   
  30.                    
  31.               
  32.               
  33.                 org.apache.maven.plugins  
  34.                 maven-jar-plugin  
  35.                   
  36.                       
  37.                           
  38.                             com.lwf.test.TestClass  
  39.                           
  40.                       
  41.                   
  42.               
  43.               
  44.                 com.jolira  
  45.                 onejar-maven-plugin  
  46.                 1.4.4  
  47.                   
  48.                       
  49.                           
  50.                             true  
  51.                             onejar  
  52.                           
  53.                           
  54.                             one-jar  
  55.                           
  56.                       
  57.                   
  58.               
  59.           
  60.       
  61.   

打包截图如下:




 

 
 

参见:http://www.mkyong.com/maven/maven-create-a-fat-jar-file-one-jar-example/

上文中因googlecode中已没有onejar-maven-plugin所以另请参见下文:

http://my.oschina.net/noahxiao/blog/78241

方法四:使用maven-jar-plugin和maven-dependency-plugin打可执行包,引用的包放包外面文件夹下

其他不变,pom文件如下

Java代码   收藏代码
  1. "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  2.   4.0.0  
  3.   com.lwf.MavenPackage  
  4.   MavenPackage  
  5.   0.0.1-SNAPSHOT  
  6.   MavenPackage  
  7.     
  8.       
  9.       log4j  
  10.       log4j  
  11.       1.2.17  
  12.       
  13.       
  14.       fbcds  
  15.       fbcds  
  16.       1.0  
  17.       
  18.        
  19.       ojdbc7  
  20.       ojdbc7  
  21.       1.0   
  22.       
  23.     
  24.       
  25.           
  26.   
  27.                
  28.   
  29.   
  30.         
  31.              
  32.   
  33.           
  34.           
  35.   
  36.               
  37.                 org.apache.maven.plugins  
  38.                 maven-jar-plugin  
  39.                   
  40.                     
  41.                     **/log4j.properties  
  42.                     
  43.                     
  44.                       
  45.                     true  
  46.                     com.lwf.test.TestClass  
  47.                     lib/  
  48.                       
  49.                     
  50.                   
  51.               
  52.   
  53.               
  54.               
  55.                 org.apache.maven.plugins  
  56.                 maven-dependency-plugin  
  57.                 2.5.1  
  58.                   
  59.                     
  60.                     copy-dependencies  
  61.                     package  
  62.                       
  63.                         copy-dependencies  
  64.                       
  65.                       
  66.                         
  67.                       runtime  
  68.                       ${project.build.directory}/lib/  
  69.                       
  70.                     
  71.                   
  72.                           
  73.           
  74.       
  75.   

 



可以看到依赖的包拷贝到了lib目录下,打的包里没有依赖包的信息,只是简单的包,不过Manifest文件class-path要包含引用名的路径

Java代码   收藏代码
  1. Manifest-Version: 1.0  
  2. Built-By: lweifeng  
  3. Build-Jdk: 1.7.0_17  
  4. Class-Path: lib/log4j-1.2.17.jar lib/fbcds-1.0.jar lib/ojdbc7-1.0.jar  
  5. Created-By: Apache Maven 3.3.9  
  6. Main-Class: com.lwf.test.TestClass  
  7. Archiver-Version: Plexus Archiver  

 
 在以上前三种插件打包方式中,maven-shade-plugin和maven-assembly-plugin采取的是将依赖包解压再一并打到新包中,这样依赖包可能存在冲突的时候,导致运行时可能出现未知问题,而onejar-maven-plugin打包是将依赖包自动归入lib目录,不解压原包,相当于在原包基础上加壳,这样可以避免冲突的发生。第四种方法即是我们原来ant打包所使用的方法。


你可能感兴趣的:(maven)