国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Maven詳細教程

Keagan / 1487人閱讀

摘要:清理上一次執行創建的文件處理資源文件編譯代碼執行單元測試文件創建拷貝到本地的倉庫下面發布生成文檔將工程所有文檔生成網站,生成的網站界面默認和的項目站點類似,但是其文檔用格式寫的,目前不支持,需要用其他插件配合才能支持。

前言

本文可以幫助你加深對Maven的整體認識,不是一篇基礎文章。如果你現在還沒有用 Maven 跑過 HelloWorld,那么本文可能不適合你。

一、Maven簡介
Maven 官網:https://maven.apache.org  
Maven 3.3.9版本文檔:http://maven.apache.org/ref/3...

Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命周期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯。

版本:maven有自己的版本定義和規則

構建:可以完成編譯,打包,部署等。

依賴管理:方便引入所需依賴 Jar 包,不需手動下載

文檔生成:maven的site命令支持各種文檔信息的發布,包括構建過程的各種輸出,javadoc,產品文檔等。

項目關系:一個大型的項目通常有幾個小項目或者模塊組成,用maven可以很方便地管理

二、Maven生命周期

maven把項目的構建劃分為不同的生命周期(lifecycle)。粗略一點的話,它這個過程(phase)包括:

驗證(validate):驗證項目是否正確

編譯(compile): 編譯項目的源代碼

測試(test):使用合適的單元測試框架測試編譯的源代碼。這些測試不應該要求代碼被打包或部署

打包(package)

驗證(verify)

安裝(install)

部署(deploy)

maven中所有的執行動作(goal)都需要指明自己在這個過程中的執行位置,然后maven執行的時候,就依照過程的發展依次調用這些goal進行各種處理。

這個也是maven的一個基本調度機制。一般來說,位置稍后的過程都會依賴于之前的過程。當然,maven同樣提供了配置文件,可以依照用戶要求,跳過某些階段。

三、Maven 版本規范

maven使用如下幾個要素來唯一定位某一個輸出物: groupId:artifactId:packaging:version 。比如org.springframework:spring:2.5 。每個部分的解釋如下:

groupId 公司,團體等。如Apache Software的項目有以org.apache開頭的groupId。

artifactId 項目的唯一標識符。比如一個helloworld項目就叫helloworld。

packaging 項目打包輸出的類型,默認是jar。類型為war的項目產生一個web應用。

version 一個項目的特定版本。發布的項目有一個固定的版本標識來指向該項目的某一個特定的版本。而正在開發中的項目可以用一個特殊的標識,這種標識給版本加上一個"SNAPSHOT"的標記。

maven有自己的版本規范,一般是如下定義 ..- ,比如1.2.3-beta-01。要說明的是,maven自己判斷版本的算法是major,minor,incremental部分用數字比較,qualifier部分用字符串比較,所以要小心 alpha-2和alpha-15的比較關系,最好用 alpha-02的格式。

maven在版本管理時候可以使用幾個特殊的字符串 SNAPSHOT ,LATEST ,RELEASE 。比如"1.0-SNAPSHOT"。各個部分的含義和處理邏輯如下說明:

SNAPSHOT 如果一個版本包含字符串"SNAPSHOT",Maven就會在安裝或發布這個組件的時候將該符號展開為一個日期和時間值,轉換為UTC時間。例如,"1.0-SNAPSHOT"會在2010年5月5日下午2點10分發布時候變成1.0-20100505-141000-1。這個詞只能用于開發過程中,因為一般來說,項目組都會頻繁發布一些版本,最后實際發布的時候,會在這些snapshot版本中尋找一個穩定的,用于正式發布,比如1.4版本發布之前,就會有一系列的1.4-SNAPSHOT,而實際發布的1.4,也是從中拿出來的一個穩定版。

LATEST 指某個特定構件的最新發布,這個發布可能是一個發布版,也可能是一個snapshot版,具體看哪個時間最后。

RELEASE 指最后一個發布版。

四、Maven 項目依賴 1. 多模塊依賴和繼承

項目結構圖:

parent
    ├─childA(model層)
    │  └─pom.xml(jar)
    ├─childB(web層)
    │  └─pom.xml(war)
    └─pom.xml(pom)

parent中執行mvn install就能將 childA和childB 一起編譯

parent的pom.xml做如下配置:

com.song
parent
1.0-SNAPSHOT
pom    


    childA   
    childB

childA和childB的pom.xml都需要配置parent,防止引入的包沖突(如果不加parent,會分別去編譯他們引入的依賴,會重復引入包):



    parent
    com.song
    1.0-SNAPSHOT

4.0.0
childA
jar



    parent
    com.song
    1.0-SNAPSHOT

4.0.0
childB
war

子pom間存在引用關系,比如childB引用到了childA的jar包


   com.module
   childA       
   1.0-SNAPSHOT
2. 子項目繼承父項目的依賴

parent中加上,child項目就可以繼承parent項目的依賴,并且在child中可以不用加version了。


   
      
           javax.servlet
          servlet-api
          2.5
      
   
3. 依賴范圍

如果不顯示執行 屬性時,默認 compile
scope 屬性包括:

compile(編譯范圍):編譯范圍的在所有的classpath中可用,同時它們也會被打包

provided(已提供范圍):表示部署的環境當中有某容器已經提供了該jar包,只在編譯classpath(不是運行時)可用。它們不是傳遞性的,也不會被打包。例如,如果你開發了一個web應用,你可能在編譯classpath中需要可用的Servlet API來編譯一個servlet,但是你不會想要在打包好的WAR中包含這個Servlet API;這個Servlet API JAR由你的servlet容器(Tomcat)提供。

runtime(運行時范圍):只在運行和測試系統的時候需要,但在編譯的時候不需要。

test(測試范圍):在一般的 編譯和運行時都不需要,它們只有在測試編譯和測試運行階段可用。

system (系統范圍):該范圍不推薦使用(你應該一直盡量去從公共或定制的Maven倉庫中引用依賴)

詳細可參考:https://maven.apache.org/guid...
4. 可選依賴(Optional Dependencies)和依賴排除(Dependency Exclusions)

maven的依賴關系是有傳遞性的。如:A-->B,B-->C。但有時候,項目A可能不是必需依賴C,因此需要在項目A中排除對A的依賴。在maven的依賴管理中,有兩種方式可以對依賴關系進行,分別是可選依賴(Optional Dependencies)以及依賴排除(Dependency Exclusions)。

4.1 可選依賴 optional

當一個項目A依賴另一個項目B時,項目A可能很少一部分功能用到了項目B,此時就可以在A中配置對B的可選依賴。舉例來說,一個類似hibernate的項目,它支持對mysql、oracle等各種數據庫的支持,但是在引用這個項目時,我們可能只用到其對mysql的支持,此時就可以在這個項目中配置可選依賴。

配置可選依賴的原因:1、節約磁盤、內存等空間;2、避免license許可問題;3、避免類路徑問題,等等。


  sample.ProjectB
  Project-B
  1.0
  compile
  true

假設以上配置是項目A的配置,即:Project-A --> Project-B。在編譯項目A時,是可以正常通過的。

如果有一個新的項目X依賴A,即:Project-X -> Project-A。此時項目X就不會依賴項目B了。如果項目X用到了涉及項目B的功能,那么就需要在pom.xml中重新配置對項目B的依賴。

4.2 依賴排除 exclusions

當一個項目A依賴項目B,而項目B同時依賴項目C,如果項目A中因為各種原因不想引用項目C,在配置項目B的依賴時,可以排除對C的依賴。

示例(假設配置的是A的pom.xml,依賴關系為:A --> B; B --> C):


  sample.ProjectB
  Project-B
  1.0
  compile
  
    
      sample.ProjectC
      Project-C
    
   

當然,對于多重依賴,配置也很簡單,參考如下示例:

Project-A
   -> Project-B
        -> Project-D 
              -> Project-E 
              -> Project-F
   -> Project C

A對于E相當于有多重依賴,我們在排除對E的依賴時,只需要在配置B的依賴中進行即可:


  sample.ProjectB
  Project-B
  1.0-SNAPSHOT
  
    
      sample.ProjectE
      Project-E
    
  
五、Maven插件機制 1. Maven默認插件

不配置Plugin時,Maven默認會使用以下插件。如果針對各個 plugin 有特殊配置的話,需要顯示指定 plugin 和 屬性配置。

plugin function life cycle phase
maven-clean-plugin 清理上一次執行創建的target文件 clean
maven-resources-plugin 處理資源文件 resources,testResources
maven-compiler-plugin 編譯Java代碼 compile、testCompile
maven-surefire-plugin 執行單元測試文件 test
maven-jar-plugin 創建 jar package
maven-install-plugin 拷貝jar到本地的maven倉庫 .m2/repository 下面 install
maven-deploy-plugin 發布 jar deploy
maven-site-plugin 生成文檔 site
maven-site-plugin:將工程所有文檔生成網站,生成的網站界面默認和apache的項目站點類似,但是其文檔用doxia格式寫的,目前不支持docbook,需要用其他插件配合才能支持。需要指出的是,在maven 2.x系列中和maven3.x的site命令處理是不同的,在舊版本中,用 mvn site 命令可以生成reporting節點中的所有報表,但是在maven3中,reporting過時了,要把這些內容作為 maven-site-plugin的configuration的內容才行。詳細內容可以參考http://www.wakaleo.com/blog/2...

    
    
        
            src/main/java
            true 
            
                **/*.xml
            
        
        
            src/main/resources
            true
            
                **/*.properties
                *.xml
                *.dic
                *.txt
            
        
        
            src/main/resources
            false
            
                *.p12
            
        
    



    
        
        
            maven-compiler-plugin
            3.1
            
                1.8
                1.8
                UTF-8
            
        
        
        
        
            org.apache.maven.plugins
            maven-resources-plugin
            2.6
            
                UTF-8
            
        
    

2. Maven常用插件 2.0 spring-boot-maven-plugin

當使用SpringBoot開發項目的時候,會使用到spring-boot-maven-plugin插件

官方文檔:https://docs.spring.io/spring...

Spring Boot Maven plugin有5個Goals:

命令 說明
spring-boot:repackage 默認goal。在mvn package之后,再次打包可執行的jar/war,
并將mvn package生成的軟件包重命名為*.original
spring-boot:run 運行Spring Boot應用
spring-boot:start 在mvn integration-test階段,進行Spring Boot應用生命周期的管理
spring-boot:stop 在mvn integration-test階段,進行Spring Boot應用生命周期的管理
spring-boot:build-info 生成Actuator使用的構建信息文件build-info.properties

其中比較重要的命令是:

mvn package spring-boot:repackage

執行后會看到生成的兩個jar文件,一個是*.jar,另一個是*.jar.original。
這是由于在執行上述命令的過程中,Maven首先在package階段打包生成*.jar文件;然后執行spring-boot:repackage重新打包

我們也可以跳過repackage階段

clean deploy -D spring-boot.repackage.skip=true

加上-D spring-boot.repackage.skip=true參數即可,此時只會生成一個普通的jar包

2.1 maven-source-plugin

maven-source-plugin提供項目自動將源碼打包并發布的功能,在需要發布源碼項目的pom.xml文件中添加如下代碼即可:


    org.apache.maven.plugins
    maven-source-plugin
    
    
    
        
            attach-sources
            
                jar
            
        
    

執行 mvn install,maven會自動將source install到repository 。
執行 mvn deploy,maven會自動將source deploy到remote-repository 。
執行 mvn source:jar,多帶帶打包源碼。

注意:在多項目構建中,將source-plugin置于頂層或parent的pom中并不會發揮作用,必須置于具體項目的pom中。
2.2 Tomcat插件

tomcat插件有兩種:tomcat-maven-plugin 和 tomcat7-maven-plugin,使用方式基本相同。

tomcat-maven-plugin 插件是org.codehaus.mojo組織提供的,里面的tomcat是6.0.29版本,沒有更新了。

tomcat7-maven-plugin 插件是apache提供的,官網:http://tomcat.apache.org/mave...

tomcat7-maven-plugin 插件使用


    org.apache.tomcat.maven
    tomcat7-maven-plugin
    2.2
       
          /
          8080
          UTF-8
          tomcat7
       
        
            
                package
                
                    run
                
            
        

命令:

tomcat7:deploy  --部署一個web war包
tomcat7:reload  --重新加載web war包
tomcat7:start    --啟動tomcat
tomcat7:stop    --停止tomcat
tomcat7:undeploy --停止一個war包
tomcat7:run --啟動嵌入式tomcat ,并運行當前項目

tomcat-maven-plugin 插件使用


    org.codehaus.mojo
    tomcat-maven-plugin
    1.1
    
        /helloworld
        8080
        UTF-8
        http://localhost:8080/manager/html
        tomcat6
        
            -Xms256m -Xmx512m -XX:MaxPermSize=512m
          
    

命令:

tomcat:deploy   --部署一個web war包
tomcat:reload   --重新加載web war包
tomcat:start    --啟動tomcat
tomcat:stop    --停止tomcat
tomcat:undeploy --停止一個war包
tomcat:run  --啟動嵌入式tomcat ,并運行當前項目

配置參數:
path:是訪問應用的路徑
port:是tomcat 的端口號
uriEncoding:URL按UTF-8進行編碼,這樣就解決了中文參數亂碼。
Server:指定tomcat名稱。

2.3 自動部署插件wagon

自動部署包含三個步驟:
編譯打包、上傳到服務器、在服務器上執行linux命令

2.3.1 文件上傳到服務器

Maven項目可使用 mvn install 指令打包,打包完成后包位于target目錄下,要想在遠程服務器上部署,首先要將包上傳到服務器。

首先在本地的setting.xml中配置server的信息,包括id,用戶名,密碼。(當然也可以在pom.xml里面配置)


    
      linux_server
      user
      password
    

pom.xml


    
        
            org.apache.maven.wagon
            wagon-ssh
            2.8
        
    
    
        
            org.codehaus.mojo
            wagon-maven-plugin
            1.0
            
                linux_server
                target/test.war
                scp://user:password@192.168.20.128/home/tomcat7/webapps
            
        
    

linux_server: 在setting.xml中配置的server的id名字
target/test.war:是要上傳到服務器的文件,一般來說是jar或者war包 scp://user:password@192.168.20.128/home/tomcat7/webapps:配置服務器的用戶、密碼、地址以及文件上傳的目錄

命令:

# 對項目進行打包和上傳操作
mvn clean install wagon:upload-single 

如果覺的wagon命令太長,可以設置 excutions 來配置phase和goals來簡化命令。

2.3.2 在服務器上執行linux命令
1. 運行jar文件



    
        
            org.apache.maven.wagon
            wagon-ssh
            2.8
        
    
    
        
            org.codehaus.mojo
            wagon-maven-plugin
            1.0
            
            
                target/test.jar
                scp://user:password@192.168.20.128/home/java/exe
                
                    pkill -f /home/java/exe/test.jar  
                    nohup java -jar /home/java/exe/test.jar > /home/java/exe/$(date +%Y%m%d-%H%M%S).log &  
                
                true 
            
        
    

命令


mvn clean install wagon:upload-single wagon:sshexec
2. 上傳war包并啟動Tomcat

   
       
           org.apache.maven.wagon
           wagon-ssh
           2.8
       
   
   
       
           org.codehaus.mojo
           wagon-maven-plugin
           1.0
           
           
               target/javawebdeploy.war
               scp://user:password@192.168.20.128/home/tomcat7/webapps
               
                   
                   sh /home/tomcat7/bin/shutdown.sh
                   rm -rf /home/tomcat7/webapps/test
                   sh /home/tomcat7/bin/startup.sh
               
               true
           
       
   

命令

mvn clean install wagon:upload-single wagon:sshexec
2.3.3 配置execution

如果覺得 mvn clean package wagon:upload-single wagon:sshexec 命令太長了不好記,那么可以配置execution,在運行deploy的同時運行upload-single和sshexec。


    
        
            org.apache.maven.wagon
            wagon-ssh
            2.8
        
    
    
        
            org.codehaus.mojo
            wagon-maven-plugin
            1.0
            
                
                    upload-deploy
                    
                    deploy
                    
                        upload-single
                        sshexec
                    
                    
                    
                        target/test.war
                        scp://user:password@192.168.20.128/home/tomcat7/webapps
                        
                            sh /home/tomcat7/bin/shutdown.sh
                            rm -rf /coder/tomcat7/webapps/test
                            sh /coder/tomcat7/bin/startup.sh
                        
                        true
                    
                
            
        
    

部署命令




mvn clean deploy -D maven.deploy.skip=true
2.3.4. 完整示例配置

首先在本地的setting.xml中配置server的信息,包括id,用戶名,密碼。(當然也可以在pom.xml里面配置)


    
      linux_server
      user
      password
    

pom.xml


    
        
            org.apache.maven.wagon
            wagon-ssh
            2.8
        
    
    
        
            org.codehaus.mojo
            wagon-maven-plugin
            1.0
            
            
                linux_server
                scp://192.168.20.128/home/tomcat7/webapps
                true 
            
            
            
                
                
                    upload-war-to-server
                    deploy
                    
                        upload-single
                        sshexec
                    
                    
                        target/test.war
                        
                            datefilename=$(date +%Y%m%d-%H%M%S);cp /home/tomcat7/webapps/test.war /home/tomcat7/webapps/test.war.$datefilename  
                            ps -ef | grep /home/tomcat7/ | grep -v grep | awk {"print $2"} | sed -e "s/^/kill -9 /g" | sh 
                            rm -rf /home/tomcat7/webapps/test 
                            export JAVA_HOME=/home/jdk/jdk1.8.0_91;sh /home/tomcat7/bin/startup.sh 
                        
                    
                
        
    

部署命令

# 必須加 -D maven.deploy.skip=true ,表示跳過maven自身的deploy使用wagon的deploy。否則報錯“-DaltDeploymentRepository=id::layout::url parameter”
mvn clean deploy -D maven.deploy.skip=true
2.4 maven-war-plugin

Maven打包時可以對web.xml中的spring.profiles.active值進行替換。

web.xml中配置一個占位符${profiles.active}:


    spring.profiles.active
    ${profiles.active}

pom.xml配置maven-war-plugin



  
    maven-war-plugin
    3.2.2
    
      
      true
    
  




  dev



  
    dev
    
      dev
    
  
  
    release
    
      release
    
  

以上配置完成后,再通過mvn package -Pdevmvn package -Preelase打包后,${profiles.active}<占位符就被替換為devrelease

六、Maven控制測試環境和正式環境 6.1 Maven profiles切換測試環境和正式環境

    
        
        dev
        
            dev
        
        
            
            true
        
    
    
        
        release
        
            release
        
    
    
        
        beta
        
            beta
        
    
 




    helloworld
    
        
        
            src/main/resources
            
                config/
            
        
        
        
            src/main/resources/config/${profiles.active}
            .
        
    

id代表這個環境的唯一標識,在 mvn install -Pdev 來指定。
此properties定義了三個環境,分別是dev(開發環境)、beta(測試環境)、release(發布環境)
activeByDefault=true代表如果不指定某個固定id的profile,那么就使用這個環境

使用 mvn install -Pdev會將 id 為 dev 的 profile 中的定義的屬性profiles.active自動替換${profiles.active}占位符的變量。最終build到classpath的資源文件由maven-resources-plugin來指定,為src/main/resources/config/dev文件下的所有文件。

6.2 Spring Framework profile整合Maven profile

如果想要整合Maven profile和Spring Framework profile,Maven打包時可以對web.xml中的spring.profiles.active值進行替換。

web.xml中配置一個占位符${profiles.active}:


    spring.profiles.active
    ${profiles.active}

pom.xml配置maven-war-plugin



  
    maven-war-plugin
    3.2.2
    
      
      true
    
  




  dev



  
    dev
    
      dev
    
  
  
    release
    
      release
    
  

以上配置完成后,再通過mvn package -Pdevmvn package -Preelase打包后,${profiles.active}<占位符就被替換為devrelease

七、Maven 變量 1. 內置屬性

${basedir} represents the directory containing pom.xml

**${version}** equivalent to ${project.version } or ${pom.version }

2. Pom/Project properties

所有pom中的元素都可以用 project. 前綴進行引用,以下是部分常用的

**${project.build.directory}** results in the path to your "target" dir, this is the same as ${pom.project.build.directory}

${project.build.outputDirectory} results in the path to your "target/classes" dir

${project.name} refers to the name of the project.

${project.version} refers to the version of the project.

${project.build.finalName} refers to the final name of the file created when the built project is packaged

3. 本地用戶設定

所有用的的 settings.xml 中的設定都可以通過 settings. 前綴進行引用

${settings.localRepository} refers to the path of the user"s local repository.

${maven.repo.local} also works for backward compatibility with maven1

4. 環境變量

系統的環境變量通過 env. 前綴引用

${env.M2_HOME} returns the Maven2 installation path.

**${java.home}** specifies the path to the current JRE_HOME environment use with relative paths to get for example: ${java.home}../bin/java.exe

5. java系統屬性

所有JVM中定義的java系統屬性.

6. pom.xml自定義變量
 
    ... 
     
        hellowolrld 
     
    ... 
 

則引用 ${project.build.finalName} 就會得到值 hellowolrld

7. parent 工程的變量

parent工程的pom.xml中的變量用前綴 ${project.parent} 引用. 上級工程的版本也可以這樣引用: ${parent.version }.

參考文章:  
https://blog.csdn.net/wwbmyos...
https://blog.csdn.net/j080624...
http://xxgblog.com/2015/10/23...
https://blog.csdn.net/java_an...
https://blog.csdn.net/xiao__g...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69566.html

相關文章

  • dubbo整合springboot最詳細入門教程

    摘要:說明目前互聯網公司,大部分項目都是基于分布式,一個項目被拆分成幾個小項目,這些小項目會分別部署在不同的計算機上面,這個叫做微服務。當一臺計算機的程序需要調用另一臺計算機代碼的時候,就涉及遠程調用。此時就粉末登場了。 showImg(https://s2.ax1x.com/2019/07/05/ZaELxe.jpg); 說明 目前互聯網公司,大部分項目都是基于分布式,一個項目被拆分成幾個...

    JinB 評論0 收藏0
  • Java緩存框架---EhCache(基于Maven+Spring的EhCache入門教程

    摘要:今天就介紹一款常用的緩存框架。設置緩存中對象是否為永久的,如果是,超時設置將被忽略,對象從不過期。內存不足時,是否啟用磁盤緩存。磁盤失效線程運行時間間隔,默認是秒。 在當今大數據爆發時代,數據量每天都呈爆炸式增長,頻繁的數據庫訪問無疑給數據庫帶來的極大負載,除了增大物理服務器的數量,我們也可以將一些常用的、公共的資源以cache形式放在客戶端或者靠近客戶端的服務器上,從而減少了服務器的...

    suosuopuo 評論0 收藏0
  • JavaFx系列教程之一:JavaFx+Springboot+Maven 開發打包教程

    摘要:最近在用開發窗體程序,并且以后打算把所有的窗體軟件切換到上面,并且還想用的各種好處,集成了就可以愉快的用各種服務了。最重要的是打包工具。由于我是,一般用和,執行命令會看到打包成了和兩種類型的安裝包。由于沒有計算機,所以還不知道打包成的狀態。 最近在用 JavaFx 開發窗體程序,并且以后打算把所有的窗體軟件切換到 JavaFx 上面,并且還想用 springboot 的__各種好處,集...

    Coding01 評論0 收藏0
  • SpringBoot簡單入門

    摘要:接下來我們繼續看如果達成包,在加入如下配置然后通過打包,最后通過命令啟動這樣,最簡單的就完成了,但是對于一個大型項目,這是遠遠不夠的,的詳細操作可以參照官網。以上實例只是最簡單的項目入門實例,后面會深入研究。 什么是Spring Boot Spring Boot是由Pivotal團隊提供的基于Spring的全新框架,其設計目的是為了簡化Spring應用的搭建和開發過程。該框架遵循約定大...

    BWrong 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<