maven整合远程jar包和本地jar包打包部署

1.引入本地jar包的原因

最近在做的项目,需要引入虹远的人脸相关功能,这时候就需要引入他们提供的jar包。但这个时候,去maven仓库上,并没有发现有他们的jar可以引用。因此才有了这个想直接通过本地jar包的方式,直接引入使用。

按理还有一种方式,那就是可以把这个第三方jar包放到我们自己创建的远程仓库上。但因为没有弄这个,并且时间紧急,所以就使用直接引入本地jar包的方式了。

由于线上部署的项目是第三方jar包独立一个文件夹的。因此我们的思路就应该是:maven要把远程的jar包和本地的jar包统一拉到同一个文件夹里。

那这个该如何实现呢?

2.先添加本地依赖

 
     arcsoft
     arcsoft
     3.1.1.0
     system
     ${project.basedir}/libs/arcsoft-sdk-face-3.1.1.0.jar

这里要注意就是system自己jar包的路径

3.指定本地jar包的编译路径


    org.apache.maven.plugins
    maven-compiler-plugin
    
        1.8
        1.8
        UTF-8
        
            ${project.basedir}/libs
        
    

注意${project.basedir}/libs 这个就是自己本地jar包的路径

4.指定启动类,将依赖打成外部jar包


    org.apache.maven.plugins
    maven-jar-plugin
    
        
            
            false
                
                    
                    true
                    
                    lib/
                    
                    com.MgcrHelperApplication
                
                
                    lib/arcsoft-3.1.1.0.jar
                
         
     

这里的关键就是这个属性了,它的作用是把本地jar包添加到MANIFEST.MF文件中去。这里的里的值,需要和上面依赖的名字一致。

maven整合远程jar包和本地jar包打包部署_第1张图片

 打包完后,jar包名称为:lib/arcsoft-3.1.1.0.jar。但这里你要注意,我们在引入本地jar包的时候,名字是不一样的。不能写jar包的完整名字。

maven整合远程jar包和本地jar包打包部署_第2张图片

 

4.1.MANIFEST.MF

该文件存在什么地方呢?

打包完后,我们在jar包里就可以查看到该文件了。

maven整合远程jar包和本地jar包打包部署_第3张图片

该文件里的具体内容,我们来看看。

maven整合远程jar包和本地jar包打包部署_第4张图片 从这里,我们可以看出,如果想要引入本地的jar包。那么这个属性的值,就要和打包远程jar包的值一致。

5.拷贝依赖到jar外面的lib目录


    org.apache.maven.plugins
    maven-dependency-plugin
        
            
                copy-lib
                package
                
                    copy-dependencies
                
                
                    target/lib
                    false
                    false
                    compile
                 
             
         

 这个配置文件要注意两个地方:target/libcompile

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

6.最后,给一下完整的配置


        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                    UTF-8
                    
                        ${project.basedir}/libs
                    
                
            
            
            
                org.apache.maven.plugins
                maven-jar-plugin
                
                    
                        
                        false
                        
                            
                            true
                            
                            lib/
                            
                            com.MgcrHelperApplication
                        
                        
                            lib/arcsoft-3.1.1.0.jar
                        
                    
                
            
            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        copy-lib
                        package
                        
                            copy-dependencies
                        
                        
                            target/lib
                            false
                            false
                            compile
                        
                    
                
            
        
    

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