1. 程式人生 > >maven編譯程式碼詳細介紹

maven編譯程式碼詳細介紹



第一、main目錄下的主程式碼編寫完畢後,使用Maven進行編譯,在專案根目錄下執行命令mvn clean compile進
      行專案編譯。
第二、test目錄下的測試用例編寫完畢之後就可以呼叫Maven執行測試,執行mvn clean test進行測試。
第三、將專案進行編譯、測試之後,下一個重要步驟就是打包(package)。在pom.xml中定義
      <packaging>war</packaging>標籤表示將要把工程打成什麼型別的包(預設是jar型別),我們可以簡單地
      執行命令mvn clean package進行打包。
第四、war外掛的war目標將專案主程式碼打包成一個名為<artifactId>S3h3WebWs</artifactId>標籤中的定義-
      <version>0.0.1-SNAPSHOT</version>標籤中的定義.war的檔案
      (最終的jar檔案是S3h3WebWs-0.0.1-SNAPSHOT.war),該檔案也位於target/輸出目錄中,它是根據
      artifact-version.jar規則進行命名的,如有需要,我們還可以使用finalName來自定義該檔案的名稱。
第五、至此,我們得到了專案的輸出,如果我們把專案打成了jar檔案並且需要在其他專案中使用的話,就可以
      複製這個jar檔案到其他專案的Classpath中從而使用這個專案中的類。但是,如何才能讓其他的Maven項
      目直接引用這個jar呢?我們還需要一個安裝的步驟,執行mvn clean install命令。
第六、我們已經將體驗了Maven最主要的命令:mvn clean compile、mvn clean test、
     mvn clean package、mvn clean install。執行test之前是會先執行compile的,執行package之前是
      會先執行test的,而類似地,install之前會執行package。
第七、如果專案中有一個擁有main方法的類需要被呼叫執行。預設打包生成的jar是不能夠直接執行的main方法
      的,因為帶有main方法的類資訊不會新增到manifest中(我們可以開啟jar檔案中的META-INF/MANIFEST.MF
      檔案,將無法看到Main-Class一行)。為了生成可執行的jar檔案,我們需要藉助maven-shade-plugin插
      件,配置該外掛如下:
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                           <mainClass>com.todaytech.framework.utils.VoConvertXmlUtils</mainClass>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
     </plugin>
 
     plugin元素在POM中的相對位置應該在<project><build><plugins>下面。我們配置了mainClass
     為com.todaytech.framework.utils.VoConvertXmlUtils ,專案在打包時會將該資訊放到MANIFEST中。現
     在執行 mvn clean install,待構建完成之後開啟target/目錄,我們可以看到
     S3h3WebWs-0.0.1-SNAPSHOT.jar和original-S3h3WebWs-0.0.1-SNAPSHOT.jar,前者是帶有Main-Class資訊
     的可執行jar,後者是原始的jar,開啟hello-world-1.0-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看      到它包含這樣一行資訊:Main-Class: com.todaytech.framework.utils.VoConvertXmlUtils
     現在,我們在專案根目錄中執行該jar檔案:
     D: \code\S3h3WebWs>java -jar target\S3h3WebWs-0.0.1-SNAPSHOT.jar
     Hello Maven
     控制檯輸出為Hello Maven,這正是我們所期望的。
第八、使用maven archetype來建立該專案的骨架,離開當前的Maven專案目錄。
      如果是Maven 3,簡單的執行:
      mvn archetype:generate
      如果是Maven 2,最好執行如下命令:
      mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
      很多資料會讓你直接使用更為簡單的 mvn archetype:generate 命令,但在Maven2中這是不安全的,因為
      該命令沒有指定archetype外掛的版本,於是Maven會自動去下載最新的版本,進而可能得到不穩定的
      SNAPSHOT版本,導致執行失敗。然而在Maven 3中,即使使用者沒有指定版本,Maven也只會解析最新的穩定
      版本,因此這是安全的。
      我們實際上是在執行外掛maven-archetype-plugin,注意冒號的分隔,其格式為
      groupId:artifactId:version:goal,org.apache.maven.plugins是maven官方外掛的groupId,
      maven-archetype-plugin是archetype外掛的artifactId,2.0-alpha-5是目前該外掛最新的穩定版,
      generate是我們要使用的外掛目標。
      緊接著我們會看到一段長長的輸出,有很多可用的archetype供我們選擇,包括著名的Appfuse專案的
      archetype,JPA專案的archetype等等。每一個archetype前面都會對應有一個編號,同時命令列會提示一
      個預設的編號,其對應的archetype為maven-archetype-quickstart,我們直接回車以選擇該archetype,
      緊接著Maven會提示我們輸入要建立專案的groupId、artifactId、 version、以及包名package。
--------------------------------------------------------------------------------------------------
生成清除Eclipse專案結構:
mvn eclipse:eclipse
mvn eclipse:clean
清理(刪除target目錄下編譯內容):
mvn clean
僅打包Web頁面檔案:
mvn war:exploded
打包時跳過測試:
mvn package -Dmaven.test.skip=ture
跳過測試執行maven任務:    
mvn -Dmaven.test.skip=true XXX
 
建立Maven的普通java專案(只適用於Maven2.x版本): 
mvn archetype:create -DgroupId=packageName -DartifactId=projectName
建立Maven的Web專案(只適用於Maven2.x版本):   
mvn archetype:create  -DgroupId=packageName -DartifactId=webappName DarchetypeArtifactId=maven-archetype-webapp
建立Maven的Web專案(只適用於Maven3.x版本):
C:\Documents and Settings\Administrator>f:
F:\>cd F:\SoftWare\Maven\MavenWebAppTest
F:\SoftWare\Maven\MavenWebAppTest>mvn archetype:generate -DgroupId=com.shihuan -DartifactId=S3h3WebWs -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
建立Maven的Quickstart專案(只適用於Maven3.x版本):
C:\Documents and Settings\Administrator>f:
F:\>cd F:\SoftWare\Maven\MavenWebAppTest
F:\SoftWare\Maven\MavenWebAppTest>mvn archetype:generate -DgroupId=com.shihuan -DartifactId=S3h3WebWs -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
 
 
檢視詳細日誌資訊命令:
mvn archetype:create -Dgroupid=com.shihuan -Dartifactid=S3h3WebWs -e -DarchetypeArtifactid=maven-archetype-webapp
或者
mvn archetype:create -Dgroupid=com.shihuan -Dartifactid=S3h3WebWs -X -DarchetypeArtifactid=maven-archetype-webapp
編譯原始碼: mvn compile
編譯測試程式碼:mvn test-compile
執行測試:mvn test
生成站點目錄: mvn site
生成站點目錄併發布:mvn site-deploy
安裝當前工程的輸出檔案到本地倉庫: mvn install
安裝指定檔案到本地倉庫:mvn install:install-file -DgroupId=<groupId> -DartifactId=<artifactId> -Dversion=1.0.0 -Dpackaging=jar -Dfile=<myfile.jar>
檢視實際pom資訊: mvn help:effective-pom
分析專案的依賴資訊:mvn dependency:analyze 或 mvn dependency:tree
檢視幫助資訊:mvn help:help 或 mvn help:help -Ddetail=true
檢視外掛的幫助資訊:mvn <plug-in>:help,比如:mvn dependency:help 或 mvn ant:help
生成eclipse專案:mvn eclipse:eclipse
生成idea專案:mvn idea:idea
組合使用goal命令,如只打包不測試:mvn -Dtest package
只打jar包: mvn jar:jar
只測試而不編譯,也不測試編譯:mvn test -skipping compile -skipping test-compile
 
在pom.xml檔案中增加servlet容器的外掛:
<build>
 
   <plugins>
 
       <plugin>
 
           <groupId>org.codehaus.mojo</groupId>
 
           <artifactId>tomcat-maven-plugin</artifactId>
 
       </plugin>
 
       <plugin>
 
           <groupId>org.mortbay.jetty</groupId>
 
           <artifactId>maven-jetty-plugin</artifactId>
 
           <version>6.1.6</version>
 
       </plugin>
 
       <plugin>
 
           <artifactId>maven-compiler-plugin</artifactId>
 
           <configuration>
 
               <source>1.6</source>
 
               <target>1.6</target>
 
               <encoding>UTF-8</encoding>
 
           </configuration>
 
        </plugin>
 
    </plugins>
<
</build>
 
 
 
啟動tomcat:
mvn tomcat:run
 
啟動jetty: 
mvn jetty:run
 
 
轉化為eclipse專案:
mvn -Dwtpversion=1.5 eclipse:eclipse
 
這樣生成wtp外掛的web專案。
開啟eclipse,選單選擇:file>import>general>existing projects into workspace,在對話方塊中選中目錄,匯入即可。
另外,需要在eclipse裡建立一個classpath變數,名稱為:M2_REPO,值為系統使用者下.m2/repository目錄。
 
packaging : 打包的格式可以為:pom , jar , maven-plugin , ejb , war , ear , rar , par
 
 
POM間關係: 依賴關係(dependencies)、繼承關係(parent)、聚合關係(modules)。
依賴關係舉例:
<dependency>
 
    <groupId>org.hibernate</groupId>
 
    <artifactId>hibernate</artifactId>
 
    <version>3.2.6.ga</version>
<
</dependency>






繼承關係舉例:





繼承其他pom.xml配置的內容。
m
maven提供了一個類似java.lang.Object的頂級父pom.xml檔案。

可以通過下面命令檢視當前pom.xml受到超pom.xml檔案的影響:mvn help:effective-pom。


建立一個各種專案可複用的pom.xml檔案:http://easymorse.googlecode.com/svn/trunk/pom/pom.xml
部署要複用的pom.xml檔案:mvn install。 
在自己的pom檔案中繼承上述pom:<parent>
 
    <groupId>com.easymorse</groupId>
 
    <artifactId>pom</artifactId>
 
    <version>0.1</version>
<
</parent>






聚合關係舉例:


用於將多個maven專案聚合為一個大的專案。

比如目錄結構如下: 
.
.
|
|-- pom.xml
|
|-- module-a
 
    `-- pom.xml
|
|-- module-b
 
    `-- pom.xml
|
|-- module-c
 
    `-- pom.xml
|
|-- foo-all
 
    `-- pom.xml
 
 

那麼總的pom.xml檔案類似: 
.
...
 
    <modules>
 
        <module>module-a</module>
 
        <module>module-b</module>
 
        <module>module-c</module>
 
        <module>foo-all</module>
 
    </modules>
<
</project>把專案部署到tomcat下的做法:tomcat配置有管理許可權的使用者:conf\tomcat-users.xml。 <?xml version='1.0' encoding='utf-8'?><tomcat-users>  <role rolename="manager"/>  <user username="marshal" password="password" roles="manager"/></tomcat-users> 在pom檔案的tomcat外掛中新增:<plugin>    <groupId>org.codehaus.mojo</groupId>    <artifactId>tomcat-maven-plugin</artifactId>    <configuration>        <url>http://localhost:8080/manager</url>        <server>myserver</server>        <path>/mycontext</path>    </configuration></plugin> 在.m2/settings.xml檔案中增加:<settings xmlns="http://maven.apache.org/POM/4.0.0"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/settings-1.0.0.xsd">        <servers>            <server>                <id>myserver</id>                <username>marshal</username>                <password>password</password>            </server>        </servers></settings> 執行打包部署,在maven專案目錄下: mvn tomcat:deploy 然後訪問:http://localhost:8080/mycontext/ 即可。撤銷部署: mvn tomcat:undeploy 啟動web應用:mvn tomcat:start 停止web應用:mvn tomcat:stop 重新部署:mvn tomcat:redeploy 部署展開的war檔案: mvn war:exploded tomcat:exploded --------------------------------------------------------------------------------------
pom是指project object Model。pom是一個xml,在maven2裡為pom.xml。是maven工作的基礎,在執行task或者goal時,maven會去專案根目錄下讀取pom.xml獲得需要的配置資訊
pom檔案中包含了專案的資訊和maven build專案所需的配置資訊,通常有專案資訊(如版本、成員)、專案的依賴、外掛和goal、build選項等等。
pom是可以繼承的,通常對於一個大型的專案或是多個module的情況,子模組的pom需要指定父模組的pom。
project pom檔案的頂級元素。
modelVersion 所使用的object model版本,為了確保穩定的使用,這個元素是強制性的。除非maven開發者升級模板,否則不需要修改。
groupId 是專案建立團體或組織的唯一標誌符,通常是域名倒寫,如groupId  org.apache.maven.plugins就是為所有maven外掛預留的。
artifactId 是專案artifact唯一的基地址名。
packaging artifact打包的方式,如jar、war、ear等等。預設為jar。這個不僅表示專案最終產生何種字尾的檔案,也表示build過程使用什麼樣的<a href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings" target="_blank">lifecycle</a>。
version artifact的版本,通常能看見為類似0.0.1-SNAPSHOT,其中SNAPSHOT表示專案開發中,為開發版本。
name 表示專案的展現名,在maven生成的文件中使用。
url表示專案的地址,在maven生成的文件中使用。
description 表示專案的描述,在maven生成的文件中使用。
dependencies 表示依賴,在子節點dependencies中新增具體依賴的groupId artifactId和version。
build 表示build配置。
parent 表示父pom。
其中groupId:artifactId:version唯一確定了一個artifact。






Artifact
這個有點不好解釋,大致說就是一個專案將要產生的檔案,可以是jar檔案,原始檔,二進位制檔案,war檔案,甚至是pom檔案。每個artifact都由groupId:artifactId:version組成的識別符號唯一識別。需要被使用(依賴)的artifact都要放在倉庫(見Repository)中。






Repositories
Repositories是用來儲存Artifact的。如果說我們的專案產生的Artifact是一個個小工具,那麼Repositories就是一個倉庫,裡面有我們自己建立的工具,也可以儲存別人造的工具,我們在專案中需要使用某種工具時,在pom中宣告dependency,編譯程式碼時就會根據dependency去下載工具(Artifact),供自己使用。
對於自己的專案完成後可以通過mvn install命令將專案放到倉庫(Repositories)中
倉庫分為本地倉庫和遠端倉庫,遠端倉庫是指遠端伺服器上用於儲存Artifact的倉庫,本地倉庫是指本機儲存Artifact的倉庫,對於windows機器本地倉庫地址為系統使用者的.m2/repository下面。






Build Lifecycle
是指一個專案build的過程。maven的Build Lifecycle分為三種,分別為default(處理專案的部署)、clean(處理專案的清理)、site(處理專案的文件生成)。他們都包含不同的lifecycle。
Build Lifecycle是由phases構成的,下面重點介紹default Build Lifecycle幾個重要的phase:
validate 驗證專案是否正確以及必須的資訊是否可用;
compile 編譯原始碼;
test 測試編譯後的程式碼,即執行單元測試程式碼;
package 打包編譯後的程式碼,在target目錄下生成package檔案;
integration-test 處理package以便需要時可以部署到整合測試環境;
verify 檢驗package是否有效並且達到質量標準;
install 安裝package到本地倉庫,方便本地其它專案使用;
deploy 部署,拷貝最終的package到遠端倉庫和替他開發這或專案共享,在整合或釋出環境完成。


以上的phase是有序的(注意實際兩個相鄰phase之間還有其他phase被省略,完整phase見lifecycle),下面一個phase的執行必須在上一個phase完成後
若直接以某一個phase為goal,將先執行完它之前的phase,如mvn install
將會先validate、compile、test、package、integration-test、verify最後再執行install phase。




Goal
goal代表一個特定任務
A goal represents a specific task (finer than a build phase) which contributes to the building and managing of a project. 



mvn package表示打包的任務,通過上面的介紹我們知道,這個任務的執行會先執行package phase之前的phase
mvn deploy表示部署的任務
mven clean install則表示先執行clean的phase(包含其他子phase),再執行install的phase。

相關推薦

maven編譯程式碼詳細介紹

第一、main目錄下的主程式碼編寫完畢後,使用Maven進行編譯,在專案根目錄下執行命令mvn clean compile進       行專案編譯。 第二、test目錄下的測試用例編寫完畢之後就可以呼叫Maven執行測試,執行mvn clean test進行測試。 第三

Maven學習(六)-----Maven倉庫的詳細介紹

check serve 分享 date 其實在 update 工程 學習 文件中 Maven倉庫的詳細介紹 在Maven中,任何一個依賴、插件或者項目構建的輸出,都可以稱之為構件。Maven在某個統一的位置存儲所有項目的共享的構件,這個統一的位置,我們就稱之為倉庫。(倉庫

Maven整體認識——詳細介紹

stop 詳細介紹 定義變量 系統屬性 位置 final splay packaging tps 前言 本文可以幫助你加深對Maven的整體認識,不是一篇基礎文章。如果你現在還沒有用 Maven 跑過 HelloWorld,那麽本文可能不適合你。 一、Maven簡介 Mav

《基於Nginx的中介軟體架構》學習筆記---4.nginx編譯引數詳細介紹

通過nginx -V檢視編譯時引數: 在nginx安裝目錄下,通過./configure --help,檢視對應版本ngnix編譯時支援的所有引數: Nginx編譯引數詳細介紹: --help 顯示本提示資訊 --prefix=PATH 設定安裝目錄 --sbin-path=PATH 設定

LINUX核心編譯步驟詳細介紹

linux 2.6.15.6核心配置(unfinished)注意: 不同的核心版本配置選項(或組織)可能不同, 但原理都是一樣的!另外, 關於compile in, compile as module的選擇: 根檔案系統, 根檔案系統所處的裝置, PS/2滑鼠驅動不能編譯為模組! Code maturity

eclipse 配置 maven 編譯程式碼

1. 首先安裝maven外掛,進入eclipse的help->marketplace,在find框中輸入“maven”,選擇“maven integration for eclipse(juno and newer)”項的install按鈕 2. 進入window

微信小程式-微信支付詳細介紹(Thinkphp後端程式碼

流程 如微信支付的文件,不再多說 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3 一一分析一下每一步我們具體要做什麼: 1、小程式內呼叫登入介面,獲取到使用者的o

IntelliJ IDEA 下的svn檢出maven程式碼詳細的圖文總結

首先,使用的時候,自己得先在電腦上安裝個小烏龜。也就是svn啦。第一步安裝小烏龜。如下:具體安裝好像沒什麼具體要求,一路next,就好。如上圖箭頭所示,在安裝 TortoiseSVN 的時候,預設 command line client tools,是不安裝的,這裡建議勾選上

Servlet基礎 及詳細介紹(附帶程式碼

javaweb學習筆記 Servlet基礎    完整程式碼下載地址 http://download.csdn.net/download/qq_26676207/9477503 1.Servlet概述     JSP的前身就是Servlet。Servlet

深度學習之卷積神經網路CNN及tensorflow程式碼實現示例詳細介紹

一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖所示:

通俗|令人拍案叫絕的Wasserstein GAN 及程式碼(WGAN兩篇論文的中文詳細介紹

今天第一篇為WGAN理論深入介紹。 在GAN的相關研究如火如荼甚至可以說是氾濫的今天,一篇新鮮出爐的arXiv論文Wassertein GAN 卻在 Reddit 的 Machine Learning 頻道火了,連Goodfellow都在帖子裡和大家熱烈

關聯容器:unordered_map詳細介紹(附可執行程式碼

1.介紹 最近使用到一個c++的容器——unordered_map,它是一個關聯容器,內部採用的是hash表結構,擁有快速檢索的功能。 1.1 特性 關聯性:通過key去檢索value,而不是通過絕對地址(和順序容器不同) 無序性:

令人拍案叫絕的Wasserstein GAN 及程式碼(WGAN兩篇論文的中文詳細介紹)---------好理解!!

作者:鄭華濱 連結:https://zhuanlan.zhihu.com/p/25071913 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。   在GAN的相關研究如火如荼甚至可以說是氾濫的今天,一篇新鮮出爐的arXiv論文《Wasser

關於高斯模糊的詳細介紹及python程式碼實現

講的是Gaussian Blur,講的很詳細,值得仔細閱讀! python最常用的影象處理庫是PIL(PythonImaging Library),它內建了高斯模糊方法,簡單程式碼如下: import Image import ImageFilter im=Ima

使用maven編譯部署程式碼時,跳過Junit測試的辦法

在專案的pom.xml在加入如下程式碼即可: <plugin>        <groupId>org.apache.maven.plugins</groupId&

Maven配置pom.xml的詳細介紹

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaL

安裝Jenkins+git獲取程式碼+maven編譯+遠端釋出

安裝gityum install -y git安裝maven與antwget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.r

程式碼適配Masonry使用的詳細介紹

Masonry簡介 Masonry是一個輕量級的佈局框架,它擁有自己的描述語法(採用更優雅的鏈式語法封裝)來自動佈局,具有很好可讀性且同時支援iOS和Max OS X等。 總之,對於側重寫程式碼的coder,請你慢慢忘記Frame,喜歡Masonry吧 使用前的準備

WebRTC編譯詳細介紹

WebRTC技術交流群:234795279 WebRTC編譯 本人環境: 作業系統:XP SP3 VS 2008 編譯原始碼之前所需的工具 獲取原始碼工具: 1、 首先需要安裝獲取原始碼的工具SVN(專案程式碼版本管理工具,Google也用這個) Tortoi

SpringMvc常用註解詳細介紹(附示例程式碼

一、註解類配置 要使用springmvc的註解類,需要在springmvc.xml配置檔案中用context:component-scan/掃描:  二、五大重要的註解類 1.RequestMapping註解 RequestMapping註解類的使用方法 在