maven学习系列7----将依赖依赖文件打包到jar中

在发布项目的时候有可能会有这样的要求,一个jar包中即包含自研的代码,也包含依赖的库(例如log4j的jar包之后的),maven打包的时候有两种方法可以实现这种要求。

1,使用maven-assembly-plugin插件

pom.xml配置如下

         
		
			
			    maven-compiler-plugin  
			      
			        1.7  
			        1.7  
			        ${project.build.sourceEncoding}  
			      
			
	        
	           maven-assembly-plugin
		        
		          
		            jar-with-dependencies
		          
		            
                          
                            com.itsenlin.Helloworld
                        
                   
		        
		        
		          
		            make-assembly 
		            package 
		            
		              single
		            
		          
		        
	        
		
	

说明:

  • 1,assembly插件功能强大,不仅可以打jar包还可以打zip、war各种包。
  • 2,打的jar包名会以-with-dependencies结尾
  • 3,这种方式打的jar包中,是将依赖包的classes文件与本项目的classes文件放在一起打成jar包的,如下图所示(com目录是项目代码的classes文件,org目录是引入了org.apache.log4j构件的classes目录,如果依赖其他构件也有可能有其他的classes文件的目录)

                maven学习系列7----将依赖依赖文件打包到jar中_第1张图片

2,将依赖的jar包拷贝到target/classes目录下

因为maven默认是将target/classes目录下所有文件打成jar包,所以我们可以配置在编译的时候将依赖的构件拷贝到target/classes目录下,注意这种方法需要配置classpath。pom.xml配置如下:


    
        
            maven-compiler-plugin  
              
                1.7  
                1.7  
                ${project.build.sourceEncoding}  
              
        
           
            maven-jar-plugin 
              
                  
                      
                          
                        true  
                        
                        lib/  
                       
                        com.itsenlin.Helloworld
                    
                
              
        
        
        
            maven-dependency-plugin
            
                
                    copy-dependencies
                    prepare-package
                    
                        copy-dependencies
                    
                    
                         
                        ${project.build.directory}/classes/lib
                        
                        false
                         
                        true
                    
                
            
        
    
说明:

  • 1,这种方法与不把依赖打到jar包内的配置区别就是拷贝依赖包的位置有变化,见上面红色部分
  • 2,jar包解压之后如下图所示

               maven学习系列7----将依赖依赖文件打包到jar中_第2张图片

  • 3,这种方式目前测试中发现一个不太好的地方,就是会把scope为test的包也拷贝到jar包中,虽然对功能无影响,但是会增加整个jar包的大小,并且增加了无用的jar包,如下图中的junit,目前还没找到原因,找到原因之后再增加相关内容(有知道的兄弟也可告知一下,谢谢:))。

                  maven学习系列7----将依赖依赖文件打包到jar中_第3张图片

参考:

http://maven.apache.org/plugins/maven-assembly-plugin/usage.html#Resources

http://blog.csdn.net/laiahu/article/details/7105277


你可能感兴趣的:(java学习,maven)