maven02-----Maven項目構建的初次使用

?一. 創建Maven項目

1.1 建立一個Hello項目

當然也可以通過java project的方式創建符合Maven約定的目錄結果的項目,并手動建立pom.xml文件,但是太繁瑣了。因此,這里直接建立maven項目。note: eclipse有內建的maven項目創建功能,倘若不喜歡,可以裝一些差插件,使用原理是一樣的。

創建好以后會如下目錄結構:

實際上,可能還需要創建一些resources文件夾,類似如下目錄結構:

創建過程中的groupId,artifact id,version等,后面會詳細介紹。

  • groupId: 定義了項目屬于哪個組,這個組往往和項目所在的組織或公司有關。比如在googlecode上建立了一個名為myapp的項目,那么groupId就應該是com.googlecode.myapp
  • artifactId:定義了當前maven項目在組中唯一的ID
  • version:制定了項目當前的版本,snapshot意為快照,說明該項目還處于開發中,是不穩定的版本。

(1) 在src/main/java/com.test.hello包下新建立一個類Hello.java

package com.test.hello;public class Hello {public String sayHello(String name) {return "Hello "+name+"!";}}

(2) 在src/test/java/com.test.hello下創建一個HelloTest.java

package com.test.hello;import org.junit.Test;import junit.framework.Assert;public class HelloTest {@Testpublic void testHello() {Hello hello=new Hello();String results=hello.sayHello("Hermioner");Assert.assertEquals("Hello Hermioner!", results);}}

1.2 使用Maven編譯、清理、測試、打包項目

(1)使用Maven編譯項目,編譯項目的命令是:“mvn compile

打開cmd命令行,進入Hello項目根目錄執行“mvn compile"命令編譯項目的java類

note:執行了這個命令后,會下載一些依賴包到maven repository中(本地倉庫中),方便下次直接從這里讀取已經下載了的依賴包。因為,我們的測試中用到了junit,因此,第一次使用的話,本地倉庫沒有,需要到中央倉庫取下載對應的Junit的jar包到本地倉庫。

比如:

編譯成功之后,可以看到hello項目的根目錄下多了一個【target】文件夾,這個文件夾就是編譯成功之后Maven幫我們生成的文件夾,如下圖所示:

打開【target】文件夾,可以看到里面有一個【classes】文件夾,如下圖所示:

【classes】文件夾中存放的就是Maven我們編譯好的java類,如下圖所示:

這就是使用Maven自動編譯項目的過程。

(2)使用Maven清理項目,清理項目的命令是:mvn clean“

進入Hello項目根目錄執行"mvn clean"命令清理項目,清理項目的過程就是把執行"mvn compile"命令編譯項目時生成的target文件夾刪掉,如下圖所示:

(3) 使用Maven測試項目,測試項目的命令是:”mvn test"

進入Hello項目根目錄執行"mvn test"命令測試項目,如下圖所示:

測試成功之后,可以看到hello項目的根目錄下多了一個【target】文件夾,這個文件夾就是測試成功之后Maven幫我們生成的文件夾,如下圖所示:

打開【target】文件夾,可以看到里面有一個【classes】和【test-classes】文件夾,如下圖所示:

也就是說,我們執行執行"mvn test"命令測試項目時,Maven先幫我們編譯項目,然后再執行測試代碼。

(4)使用Maven打包項目,打包項目的命令是:"mvn package"

? 進入Hello項目根目錄執行"mvn?package"命令測試項目,如下圖所示:

打包成功之后,可以看到hello項目的根目錄下的【target】文件夾中多了一個Hello-0.0.1-SNAPSHOT.jar,這個Hello-0.0.1-SNAPSHOT.jar就是打包成功之后Maven幫我們生成的jar文件,如下圖所示:

5、使用Maven部署項目,部署項目的命令是:"mvn install"

note: 必須執行mvn install才可以讓別的maven項目引入這個jar,因為只有將構建下載到本地倉庫以后,才可以讓所有的maven項目使用。同理,只有將hello項目的構建安裝到本地倉庫,其它maven項目才可以使用。

進入Hello項目根目錄執行"mvn?install"命令測試項目,如下圖所示:

安裝成功之后,首先會在hello項目的根目錄下生成【target】文件夾,打開【target】文件夾,可以看到里面會有Hello-0.0.1-SNAPSHOT.jar,這個Hello-0.0.1-SNAPSHOT.jar就是安裝成功之后Maven幫我們生成的jar文件,如下圖所示:

除此之外,在我們存放Maven下載下來的jar包的倉庫也會有一個Hello-0.0.1-SNAPSHOT.jar,所以Maven安裝項目的過程,實際上就是把項目進行【清理】→【編譯】→【測試】→【打包】,再把打包好的jar放到我們指定的存放jar包的Maven倉庫中,如下圖所示:

所以使用"mvn install"命令,就把maven構建項目的【清理】→【編譯】→【測試】→【打包】的這幾個過程都做了,同時將打包好的jar包發布到本地的Maven倉庫中,所以maven最常用的命令還是"mvn install",這個命令能夠做的事情最多。

1.2 組合使用Maven的命令

maven的編譯,清理,測試,打包,部署命令是可以幾個命令同時組合起來使用的,常用的命令組合如下:

  (1)先清理再編譯:"mvn clean compile",如下所示:

還有的就是"mvn clean test","mvn clean package","mvn clean install",這些組合命令都比較常用。

  以上就是關于Maven構建項目的各個個過程演示。

note:項目的主代碼會被打包到最終的構建中(如jar),而測試代碼只能在運行測試時用到,不會被打包。

1.3 mvn命令的添加

我們選中maven項目或者pom.xml文件以后,點擊右鍵run as---會出現一些mvn命令。如果我們不滿足于這些,我們可以自己添加,讓它出現在run as的可選菜單中。

也可以通過選擇maven build,在彈出的對話框中添加想要使用的命令。

?

二. 在別的項目中使用通過Maven安裝生成的項目的jar包

在上面,我們使用mvn install命令將hello這個項目打包成了Hello-0.0.1-SNAPSHOT.jar包并且發布到本地的maven倉庫E:\repository\me\gacl\maven\Hello\0.0.1-SNAPSHOT中,下面我們來看看如何在別的項目中使用Hello-0.0.1-SNAPSHOT.jar

2.1 方法一

直接在pom.xml文件中配置hello項目打包生成jar包,即:

2.2 方法2

在根目錄下新建立一個lib文件夾,將hello的jar包粘貼進來,并build path進來,這樣就可以使用hello項目中的東西拉。

?三. 通過eclipse創建maven項目的底層實現原理簡介

在通過eclipse創建maven項目時,實際上還是采用的archetype生成了項目骨架。

?

?執行相關的archetype命令,就可以創建出上面目錄結構的maven項目拉。

3.1 pom.xml文件

通過Maven構建的JavaProject,在項目的根目錄下都會存在一個pom.xml文件,進入myapp目錄,可以看到有一個pom.xml文件,這個文件是Maven的核心。如下圖所示:

  

    1、pom意思就是project object model。

    2、pom.xml包含了項目構建的信息,包括項目的信息、項目的依賴等。

    3、pom.xml文件是可以繼承的,大型項目中,子模塊的pom.xml一般都會繼承于父模塊的pom.xml

  pom.xml文件的內容如下:

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4 
 5   <groupId>com.mycompany.app</groupId>
 6   <artifactId>myapp</artifactId>
 7   <version>1.0-SNAPSHOT</version>
 8   <packaging>jar</packaging>
 9 
10   <name>myapp</name>
11   <url>http://maven.apache.org</url>
12 
13   <properties>
14     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15   </properties>
16 
17   <dependencies>
18     <dependency>
19       <groupId>junit</groupId>
20       <artifactId>junit</artifactId>
21       <version>3.8.1</version>
22       <scope>test</scope>
23     </dependency>
24   </dependencies>
25 </project>

pom.xml文件的節點元素說明:

  •     <project>       pom文件的頂級節點
  •     <modelVersion>     object model版本,對Maven2和Maven3來說,只能是4.0.0 
  •     <groupId>       項目創建組織的標識符,一般是域名的倒寫
  •     <artifactId>      定義了項目在所屬組織的標識符下的唯一標識,一個組織下可以有多個項 目
  •     <version>     ?  當前項目的版本,SNAPSHOT,表示是快照版本,在開發中
  •     <packaging>    ? 打包的方式,有jar、war、ear等
  •     <name>        項目的名稱
  •     <url>        ? 項目的地址
  •     <properties>    屬性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  •     <dependencies>  ?? 構建項目依賴的jar

  其中由groupId、artifactId和version唯一的確定了一個項目坐標

?

?

?

參考文獻:

《Maven實戰》

https://www.cnblogs.com/xdp-gacl/p/4051690.html

轉載于:https://www.cnblogs.com/Hermioner/p/10247214.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450187.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微軟超過蘋果 成為全球第一大市值公司

11月23日周五盤中至收盤&#xff0c;微軟市值正式超過蘋果&#xff0c;成為世界上市值最高的公司。收盤時&#xff0c;微軟市值為7533.4億美元&#xff0c;蘋果市值為7468.2億美元&#xff0c;亞馬遜市值為7366.2億美元&#xff0c;谷歌市值為7255.2億美元。 上次蘋果與微軟市值…

創新大賽成就創業夢想 超30%入榜應用獲投資意向

摘要&#xff1a;騰訊開放平臺宣布移動應用賽區正式開啟&#xff0c;新一輪的創業夢想正在成長中。據悉&#xff0c;在騰訊開放平臺應用創新大賽中誕生了多款DAU&#xff08;日活躍用戶數&#xff09;超百萬的應用。小魚吃吃吃、開心泡泡貓等引領社交游戲潮流&#xff0c;視頻達…

如何判斷軟件架構的好與壞

判斷一個軟件的架構的好與壞有很多方法&#xff0c;不過如果讓我一句話來描述的話&#xff1a; 如果一個軟件開發程度在70%以上的情況下&#xff0c;加入一個新功能&#xff0c;還需要涉及到大量的文件&#xff0c;代碼的修改&#xff0c;那么這個軟件架構一定很爛&#xff0c;…

網關(Gateway)詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 網關(Gateway)又稱網間連接器、協議轉換器。網關在網絡層以上實現網絡互連&#xff0c;是最復雜的網絡互連設備&#xff0c;僅用于兩個高…

【重點突破】—— React實現富文本編輯器

前言&#xff1a;富文本編輯器Rich Text Editor, 簡稱 RTE, 是一種可內嵌于瀏覽器&#xff0c;所見即所得的文本編輯器。 一、安裝插件 react-draft-wysiwyg&#xff1a; 文本編輯器插件 draftjs-to-html&#xff1a;文本轉換為html的插件 yarn add react-draft-wysiwyg draftj…

1106: 回文數(函數專題)

題目描述 一個正整數&#xff0c;如果從左向 右讀&#xff08;稱之為正序數&#xff09;和從右向左讀&#xff08;稱之為倒序數&#xff09;是一樣的&#xff0c;這樣的數就叫回文數。輸入兩個整數m和n&#xff08;m<n)&#xff0c;輸出區間[m&#xff0c;n]之間的回文數。 …

Ubuntu 12.10 正式發布

Canonical今天正式發布了Ubuntu 12.10版本&#xff0c;代號為“Quantal Quetzal”&#xff0c;意為量子綠咬鵑&#xff0c;綠咬鵑是一種生活在美洲的顏色極為鮮艷的鳥。Ubuntu的版本代號一直都這么奇怪。 在該版本中&#xff0c;改進了Unity桌面環境&#xff0c;弱化了本地應用…

Hibernate中1+N問題以及解決方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. Hibernate中的1N問題描述 在多對一關系中&#xff0c;當我們需要查詢多的一方對應的表的記錄時&#xff0c;可以用一條sql語句就能…

Android應用開發—通用的GridView網格分割線

注&#xff1a;本文基于 Android RecyclerView 使用完全解析 體驗藝術般的控件 中關于GridView網格分割線部分代碼擴展而來。 原接口代碼&#xff1a; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import andro…

hdfs部署

一、下載Hadoop 2.6.0-cdh5.7.0的tar.gz包并解壓&#xff1a; wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz cd /usr/local/hadoop-2.6.0-cdh5.7.0/ ls bin bin-mapreduce1 cloudera etc examples …

JVM技術周報第2期

JVM技術周報第2期 JVM技術周報分享JVM技術交流群的討論內容&#xff0c;由群內成員整理歸納而成。如果你有興趣入群討論&#xff0c;請關注「Java技術精選」公眾號&#xff0c;通過右下角菜單「入群交流」加我好友&#xff0c;獲取入群詳情。 1、如何閱讀源碼&#xff1f; 在我…

最長重復子串和最長不重復子串求解

最長重復子串和最長不重復子串求解 本文內容框架&#xff1a; 1 最長重復子串 基本方法、KMP算法求解、后綴數組求解 2 最長不重復子串 基本方法、動態規劃、動態規劃Hash 3 小結 1最長重復子串 1.1問題描述 首先這是一個單字符串問題。子字符串R 在字符串L 中至少出現兩…

sql 查詢結果為null替換 為 0

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 mysql : ifnull( xxx , 0 ) select ifnull(colname,0) from tablename oracle: NVL&#xff08;xxx , 0 )

前后端分離——token超時刷新策略

前言 記錄一下前后端分離下————token超時刷新策略&#xff01; 需求場景 昨天發了一篇記錄 前后端分離應用——用戶信息傳遞 中介紹了token認證機制&#xff0c;跟幾位群友討論了下&#xff0c;有些同學有這么一個疑惑&#xff1a;token失效了&#xff0c;應該怎么做&…

Android ImageView的scaleType(圖片比例類型)屬性與adjustViewBounds(調整視圖邊界)屬性

本文轉載自[Android ImageView的scaleType&#xff08;圖片比例類型&#xff09;屬性與adjustViewBounds&#xff08;調整視圖邊界&#xff09;屬性]并做了排版的修改(http://www.cnblogs.com/xzbc/p/5098347.html) Android ImageView的scaleType的屬性可設置為matrix&#xff…

阿里云@廣東:讓我們一起上云!

鍋爐故障預測 預警準確率95%以上 利用算法模型進行制程能力的 綜合分析與評估優化 提升定標效率 時間降低30% 構建垃圾焚燒發電工藝的優化算法模型 綜合考慮環保和設備負荷因素 推薦最優工藝參數組合 優化人工操作&#xff0c;提高燃燒效率 中海油能源發展公司 石油鉆探預測優化…

程序員的自我經營

程序員的自我經營之道第一層 從你決定邁出校門進入社會的那一刻起&#xff0c;你就進入了一個戰場&#xff0c;這個戰場雖然沒有硝煙彌漫&#xff0c;沒有炮火紛飛&#xff0c;但卻絕不亞于任何一個真正的戰場。你要在這個戰場上去搏殺&#xff0c;去競爭&#xff0c;利用各種…

P3966 [TJOI2013]單詞

\(\color{#0066ff}{ 題目描述 }\) 小張最近在忙畢設,所以一直在讀論文。一篇論文是由許多單詞組成但小張發現一個單詞會在論文中出現很多次,他想知道每個單詞分別在論文中出現了多少次。 \(\color{#0066ff}{輸入格式}\) 第一行一個整數N,表示有N個單詞。接下來N行每行一個單詞,…

Android應用開發—RecyclerView繪制蒙層

背景&#xff1a;如何在跨越兩個或兩個以上的item繪制一個view&#xff0c;該view需要跟隨recyclerView的滑動而整體移動。 Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDrawOver(c, parent, state);final View child …