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 compilemvn clean test
     mvn clean packagemvn 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.jaroriginal- 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配置的內容。
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.0
http://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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM