Maven项目引入本地jar包史上最详细实践方法总结

日期 作者 版本 备注
2020-09-27 [email protected] V1.0

maven项目引入本地jar包问题从3个层面考虑:

1. IDE工具如Jetbrains IDEA考虑:

依次打开IDEA的File – Project Structure – Project Settings – Modules –
Dependencies 选项卡区域,点击右上角+号图标,选择1.JARS or
directories…,再选择java工程根目录下的lib或libs目录下,把所有需要本地引入的jar包都多选中,
然后点击OK即可。

image

2. Maven编译层面考虑:

在pom.xml文件中dependencies组件的最后部分添加如下图的本地依赖jar包。

注意scope为system表示本地的jar包。
systemPath为本地路径,一定要用${project.basedir}/开头引入,以表通用型。
image

以上3个地方如此修改后,联合的效果是,mvn clean package
后会target目录下生成一个lib目录,并且把所有的远程jar包和本地jar包都拷贝到lib目录下,以供后期java程序运行时找到之用。注意本地jar包会以上图中绿色框的约定的命名方式出现在lib目录下。

image

上图中true表明会在生成的目标jar文件中MANIFEST.MF中添加classpath如下图,lib
表明会给MANIFEST.MF中的classpath中每一个classpath加一个前缀lib.这些特性都非常重要。

因此组件下一共有3项:
image

image

以vim 打开生成的目标jar包vi mylucenedemo.jar:后:
image

光标放在MANIFEST.MF上按下回车,即可看到:
image

此外,如果有需要的话,java工程目标jar的运行可能还依赖于一些配置文件,通过pom.xml中profiles下的profile将其拷贝到target目录下的conf目录中去:
image
效果如下图:

3. 目标jar程序执行层面考虑:

接下来,就可以在java工程的根目录下执行:mvn clean install -U, 会生成如下的target目录,有用的是conf目录,lib目录和目标文件mylucenedemo.jar.

image

执行方式是: 在target目录下直接执行java -jar mylucenedemo.jar即可。

image

会自动读取当前目下的lib子目录的所有依赖jar包,包括引入的本地jar包。以及conf目录下的所有配置文件。

最后,附上本文中示例的pom.xml文件全文内容如下:



    4.0.0

    com.free
    lucenedemo
    1.0-SNAPSHOT

    
        UTF-8
        5.1.30
    

    












        





        






        





        







        
        
            io.grpc
            grpc-netty-shaded
            1.24.0
        
        
            io.grpc
            grpc-protobuf
            1.24.0
        
        
            io.grpc
            grpc-stub
            1.24.0
        

        
            org.springframework
            spring
            2.5.6
        

        
        
            mysql
            mysql-connector-java
            ${mysql.driver.version}
            runtime
        

        
            commons-cli
            commons-cli
            1.2
        
        
            org.apache.turbine
            turbine
            4.0-M2
        

        
            avalon
            avalon-framework
            4.1.4
        
        
            org.apache.fulcrum
            fulcrum-testcontainer
            1.0.7
        
        
            javax
            javaee-api
            8.0
        

        
            javax.mail 
            mail 
            1.4.5 
        
        
            com.sun.mail 
            javax.mail 
            1.5.4 
        
        
            org.apache.commons
            commons-lang3
            3.4
        

        
            org.apache.commons
            commons-exec
            1.3
        

        
            org.slf4j
            slf4j-api
            1.7.7
        

        
            org.slf4j
            slf4j-log4j12
            1.7.7
        

        
            log4j
            log4j
            1.2.16
        
        
            net.sourceforge.javacsv
            javacsv
            2.0
        


        
            org.apache.lucene
            my-lucene-core
            8.6.2
            system
            ${project.basedir}/lib/lucene-core-8.6.2-SNAPSHOT.jar
        

        
            org.apache.lucene
            my-lucene-demo
            8.6.2
            system
            ${project.basedir}/lib/lucene-demo-8.6.2-SNAPSHOT.jar
        

        
            org.apache.lucene
            my-lucene-queryparser
            8.6.2
            system
            ${project.basedir}/lib/lucene-queryparser-8.6.2-SNAPSHOT.jar
        

    




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


            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        copy
                        package
                        
                            copy-dependencies
                        
                        
                            ${project.build.directory}/lib
                        
                    
                
            


            
                org.apache.maven.plugins
                maven-jar-plugin
                
                    
                        mylucenedemo
                        
                            jar
                        
                        package
                        
                            mylucenedemo
                            
                                
                                    true
                                    lib
                                    com.freedom.lucene.demo.LuceneLevenshteinDemo
                                    false
                                

                                
                                
                                     lib/my-lucene-demo-8.6.2.jar lib/my-lucene-queryparser-8.6.2.jar lib/my-lucene-core-8.6.2.jar 
                                

                            
                        
                    
                
            

        
    

    
        
            config-package
            
                
                    
                        org.apache.maven.plugins
                        maven-antrun-plugin
                        1.7
                        
                            
                                config-package
                                package
                                
                                    run
                                
                                
                                    
                                        
                                            
                                        
                                        
                                            
                                        
                                    
                                
                            
                        
                    
                
            
            
                true
            
        
    

你可能感兴趣的:(mavenjar包依赖管理工具)