maven——项目构建和依赖管理工具


apache maven是一个用于项目构建和依赖管理的工具。

添加archetype

https://repo1.maven.org/maven2/archetype-catalog.xml

更改本地仓库存储位置:修改配置文件${user.home}/.m2/settings.xml或 $MAVEN_HOME/conf/setting.xml中的内容

...

mvn archetype:generate会非常慢,搜索了本地和远程太多archetype,而加上-DarchetypeCatalog=local将只搜索${user.home}/.m2/archetype-catalog.xml中定义的本地archetype,会大大提高速度。

mvn archetype:crawl会根据远程数据生成本地archetype目录$maven_localRepository/archetype-catalog.xml。

download jar, sources, javadoc

 mvn dependency:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]
 eg.	mvn dependency:get -Dartifact=mysql:mysql-connector-java:LATEST
		mvn dependency:get -Dartifact=mysql:mysql-connector-java:LATEST:jar:sources

download sources/javadoc

 mvn dependency:sources -DincludeGroupIds=grouId1,groupId2... -Dclassifier=sources
 mvn dependency:get -Dartifact=mysql:mysql-connector-java:LATEST:jar:sources
 
download sources for each of dependencies in pom.xml
 mvn dependency:sources		
 mvn dependency:resolve -Dclassifier=sources
download javadoc
 mvn dependency:get -Dartifact=mysql:mysql-connector-java:LATEST:jar:javadoc
 # download javadoc for each of dependencies in pom.xml
 mvn dependency:sources -Dclassifier=javadoc
 mvn dependency:resolve -Dclassifier=javadoc

copy dependecies

mvn dependency:copy -Dartifact=g:a:v -o -DrepoUrl=file://path/to/your/repo
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=groupId:artifactId:version[:packaging][:classifier] -DoutputDirectory=[target] 

输出依赖jar包文件路径

mvn dependency:build-classpath [-Dmdep.outputFile=/path/file](输出到文件)

mvn基本的几个jar包相关命令:
mvn clean 清除target/编译文件夹
mvn compile 编译源码
mvn package 编译并打包为jar文件
mvn install 将jar文件安装到本地repo
mvn deploy 根据pom.xml中的信息,将jar包部署到远程repo

跳过测试
mvn -DskipTests

指定pom文件
mvn -f some-pom.xml

插件描述文档

mvn help:describe -Ddetail -Dplugin= 或 -Dcmd=:
# mvn help:describe -Dplugin=exec
# mvn help:describe -Dcmd=install:install-file
# mvn help:describe -Dplugin=g:a:v

关闭mvn的日志输出
mvn -q

生成源码jar包
mvn source:jar

maven 3.x super pom位置
$M2_HOME/lib/maven-model-builder-3.x.jar:/org/apache/maven/model/pom-4.0.0.xml

######## unresolved #########
list addable dependencies in local repository
list addable dependencies all available repositories
list achetypes

(不可用)get file path of artifact
mvn dependency:location -Dartifact=g???v

生成javadoc.jar接口文档包

mvn javadoc:jar
需要添加plugin: org.apache.maven.plugins:maven-javadoc-plugin

生成sources.jar源码包

mvn source:jar
需要添加plugin: org.apache.maven.plugins:maven-source-plugin

mvn命令发布到nexus私服
mvn deploy
如果需要同时发布sources.jar, javadoc.jar,需在生成这些包后执行命令。
执行命令需要pom中有的配置,同时maven公有settings.xml中下配置nexus私服登录的用户名密码。



        
            my-mvn 
            
            http://exmaples.com/nexus/content/repositories/releases/
        
        
            my-mvn
            http://exmaples.com/nexus/content/repositories/snapshots/
        




  
      my-mvn
      admin
      secret-pwd
  




    
        
            org.apache.maven.plugins
            maven-source-plugin
            3.0.0
            
                
                    
                        jar
                    
                
            
        
        
            org.apache.maven.plugins
            maven-javadoc-plugin
            3.0.0
            
                
                    
                        jar
                    
                
            
        
    


删除损坏jar包

remove damaged jars.
网络条件恶劣会导致下载的jar是不完整的或者损坏的(corrupted),而添加这种jar包的依赖会导致读取到不正确的class(加了jar包却找不到对应class),此时我们需要找出本地maven库中损坏的jar,然后删除它们,重新下载,命令行脚本:

cd $M2_REPO;
for f in `find -type f -iname '*.jar' -printf '%P\n'`; do unzip -tq "$f" &>/dev/null; [[ $? -ne 0 ]] && echo "$f" | tee -a ~/corruptedmvnjar ; done;
cd -

打包mave项目及其依赖

一般建议用功能更丰富的shade插件,而非assembly。

编译出错

仔细看输出ERROR日志,如提示某个类miss,除了看是否添加了该类的依赖,scop是否对应以外,还需看这个类所在依赖是否使用了其他依赖,而其他依赖却没有添加,或者版本不兼容。

打包到nexus:

pom.xml

    
        
            ossrh
            Sonatype Nexus Snapshots
            https://oss.sonatype.org/content/repositories/snapshots/
        
        
            ossrh
            Nexus Release Repository
            https://oss.sonatype.org/service/local/staging/deploy/maven2/
        
    

增量复制maven库

cd $M2_REPO
zip -r -u ~/Downloads/mvnrepo.zip *  # 可加选项排除部分大ja包

maven仓库镜像

添加仓库镜像,解决下载慢的问题



      alimaven
      aliyun maven
      http://maven.aliyun.com/nexus/content/groups/public/
      central


    
      huaweicloud
      
      central
      https://mirrors.huaweicloud.com/repository/maven/
     

    
      huaweicloud
      anonymous
      devcloud
     

镜像会拦截所有通往被镜像的请求。因此若镜像更新不及时,导致镜像中没有本已存在于被镜像repo(如maven central)的artifact时,mvn下载会失败。

maven私有库

添加私有库 settings.xml


 ...
 ...
 
 

maven项目添加自己提供的jar:

修改plugin默认版本

修改文件$M2_HOME/lib/maven-core-xxx.jar!:/META-INF/plexus/components.xml及default-bindings.xml中对应plugin的版本

maven java

pom.xml中最常用的设置jdk、项目文件编码的代码如下:


    
    1.8
    
    1.8
    
    11
    
    UTF-8

maven scala



  
    
      scala-tools.org
      Scala-Tools Maven2 Repository
      http://scala-tools.org/repo-releases
    
  
  
    
      scala-tools.org
      Scala-Tools Maven2 Repository
      http://scala-tools.org/repo-releases
    
  
  
  
    
      org.scala-lang
      scala-library
      ${scala.version}
    
  

    
    
      
        net.alchim31.maven
        scala-maven-plugin
        
            
                scala-compile-first
                process-resources
                
                    add-source
                    compile
                
            
            
                scala-test-compile
                process-test-resources
                
                    testCompile
                
            
        
      
      
      
            maven-compiler-plugin
            3.7.0
      
      
    
  

kotlin maven


    
    true



    org.jetbrains.kotlin
    kotlin-stdlib
    
    
    
    ${kotlin.version}



    kotlin-reflect



shade-plugin:


    maven-shade-plugin
    3.1.0
    
        
        false
    
    
        
            
            package
            
                shade
            
            
                
                    
                    
          application.properties
                    
                     
                    
                     com.examples.AppMain
                     
                        xxx
                    
                    
                
                
                
                    
                        *:*
                        
                           META-INF/*.SF
                            META-INF/*.DSA
                            META-INF/*.RSA