将一个maven项目和第三方依赖一起打成没有main-class的普通jar

最近开发的项目需要给一个jdk1.7的项目写一个SDK,而且这个jdk1.7的项目也不是maven项目,是那种原始的java web。既然这样,想法就有了。开发这个SDK的时候我是肯定要用maven的,打包的时候可以打成一个普通jar包,并且把第三方依赖也打进jar包中,还要注意开发编译得用jdk1.7,这样就可以直接提供这个jar包给他们,也不会出现jdk版本问题。思路清晰就开始开发一个demo了。

将一个maven项目和第三方依赖一起打成没有main-class的普通jar,这种场景其实挺多的,比如很多人喜欢自己封装HttpClient,但总不能新开发一个服务就重新封装一遍或者复制粘贴一遍吧。又比如自己写了几个工具类,比较通用。像这些就可以打成没有main-class的普通jar,下次新开发一个服务的时候直接引用进来就好了。

下面看demo:

将一个maven项目和第三方依赖一起打成没有main-class的普通jar_第1张图片

这是demo的目录,很简单就一个ApplicationUtil,看一下这个:

 

将一个maven项目和第三方依赖一起打成没有main-class的普通jar_第2张图片

一个测试方法返回字符串的。

通过目录可以看到有pom.xml,是个maven项目,这个pom.xml是关键,看一下:



    4.0.0

    com.hikvision
    stair-client
    1.0-SNAPSHOT
    stair-client
    PDM STAIR

    
        1.7
    

    
        
        
            com.alibaba
            fastjson
            1.2.70
        
        
        
            com.google.guava
            guava
            27.1-jre
        
        
        
            org.projectlombok
            lombok
            1.18.8
        
        
        
            org.slf4j
            slf4j-log4j12
            1.7.5
        
        
            org.apache.logging.log4j
            log4j-core
            2.12.1
        
        
            org.apache.logging.log4j
            log4j-api
            2.12.1
        
        
        
            org.apache.httpcomponents
            httpclient
            4.5.10
        
    

    
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.7
                    1.7
                    
                    UTF-8
                
            

            
            
                org.apache.maven.plugins
                maven-assembly-plugin
                
                    
                        jar-with-dependencies
                    
                
                
                    
                        make-assembly
                        package
                        
                            single
                        
                    
                
            
        
    

可以看到jdk用的1.7,还引入了很多第三方依赖,最后用maven-assembly-plugin这个插件将第三方依赖一起打进jar包。

这样就可以了,然后用maven的package打包就好了,看一下打包后的结果:

将一个maven项目和第三方依赖一起打成没有main-class的普通jar_第3张图片

可以看到有两个jar,上面那个就是没有第三方依赖的轻量级jar,下面那个名字有jar-with-dependencies就是包含了第三方依赖的重量级jar,可以反编译一下这个重量级jar:

将一个maven项目和第三方依赖一起打成没有main-class的普通jar_第4张图片

可以看到自己写的项目和外部引用的都打在一起了,虽然有点乱,但是目的达到了。 

可以测试一下这个重量级jar能不能被一个非maven项目直接引用:

将一个maven项目和第三方依赖一起打成没有main-class的普通jar_第5张图片

这是一个原始的java web项目,jar包直接引用进来,可以看到是ok的 。

你可能感兴趣的:(日常问题)