Maven 配置文件 生命周期 常用命令詳解
當(dāng)前,JVM生態(tài)圈主要的三大構(gòu)建工具:
- Apache Ant(帶著Ivy)
- Maven
- Gradle
對(duì)于初學(xué)者,Ant是最清晰的,只要讀懂Xml配置文件你就能夠理解它干了什么,但是ant文件很容易變的更加復(fù)雜。Maven有自己的工程目錄規(guī)則和內(nèi)置的構(gòu)建生成周期,從而使構(gòu)建文件更加簡(jiǎn)單。gradle有很多開(kāi)箱即用的插件,語(yǔ)法更加短小精悍,易于理解。
在講解maven之前這里我們先簡(jiǎn)單比較下Maven和Ant。下面是一個(gè)簡(jiǎn)單的Ant例子。這個(gè)例子可以看出我們需要明確的告訴Ant。我們想讓他做什么。有一個(gè)包含javac任務(wù)的編譯目標(biāo)來(lái)講src/main/java的源碼編譯至target、class目錄。需要明確的告訴ant源碼在哪里,結(jié)果字節(jié)碼存儲(chǔ)在哪里。如何將這些字節(jié)碼打包成jar文件。
<?xml version="1.0" encoding="UTF-8"?>
<project name="test_HelloWorld" basedir="." default="">
<property name="test" location="test"/>
<target name="init">
<mkdir dir="${test}/classess/com/test"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${test}" destdir="${test}/classess/com/test"/>
</target>
<target name="dist" depends="compile">
<mkdir dir="${test}/classess/com/test/lib"/>
<jar jarfile="${test}/classess/com/test/lib/test.jar" basedir="${test}/classess/com/test"/>
</target>
<target name="run" depends="compile">
<java classname="HelloWorld" classpath="${test}/classess/com/test"/>
</target>
<target name="clean">
<delete dir="${test}/classess"/>
</target>
</project>
在Maven中你只需要?jiǎng)?chuàng)建一個(gè)簡(jiǎn)單的pom.xml。將你的源碼放在指定目錄下。然后運(yùn)行mvn install 。就能完成和ant同樣的事情。從命令行運(yùn)行mvn install會(huì)處理資源文件,編譯源代碼,運(yùn)行單元測(cè)試,創(chuàng)建一個(gè)jar。然后把這個(gè)jar安裝到本地倉(cāng)庫(kù)為其他項(xiàng)目提供重用性。不用做任何修改,運(yùn)行mvn site然后在target/site目錄找到一個(gè)Index.html。這個(gè)文件鏈接了javaDoc和一些關(guān)于源代碼的報(bào)告。
為什么maven運(yùn)行一個(gè)命令就能實(shí)現(xiàn)ant定義的一大堆的事情?
看下面我總結(jié)的兩者優(yōu)缺點(diǎn)就明白了。
Ant
- Ant沒(méi)有正式的約定如一個(gè)一般項(xiàng)目的目錄結(jié)構(gòu)。你必須明確告訴Ant哪里去找源代碼,哪里放置輸出。
- Ant是程序化,需要明確告訴的告訴Ant做什么,什么時(shí)候做。你必須告訴它去編譯,然后復(fù)制,然后壓縮
- Ant沒(méi)有生命周期,你必須定義目標(biāo)和目標(biāo)之間的依賴(lài),你必須手工為每個(gè)目標(biāo)附上一個(gè)任務(wù)序列
Maven
- maven擁有約定,因?yàn)槟阕裱思s定,它已經(jīng)知道你的源代碼在哪里,把字節(jié)碼放到target/class,然后target生成一個(gè)jar文件
- maven是聲明式的。你需要做的只是創(chuàng)建一個(gè)pom.xml 文件然后將源代碼放到默認(rèn)目錄。Maven會(huì)幫你處理其他事情
- maven有一個(gè)生命周期,當(dāng)你運(yùn)行mvn install的時(shí)候被調(diào)用,這條命令告訴maven執(zhí)行一系列的有序步驟。直到到達(dá)你指定的生命周期
接下來(lái)我們從以下三個(gè)方面講解Maven
- maven的pom.xml和Settings.xml解析
- maven命令
- maven的生命周期
maven的Settings.xml解析
對(duì)Maven本身行為的定制
<?xml version="1.0" encoding="UTF-8"?> <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <localRepository/> <interactiveMode/> <offline/> <servers/> <mirrors/> <proxies/> <profiles/> <activeProfiles/> <pluginGroups/> </settings>
- localRepository,給出本地庫(kù)的路徑,默認(rèn)值為${user.home}/.m2/repository。該路徑在build服務(wù)器上非常重要,項(xiàng)目構(gòu)建過(guò)程中可以直接引用本地庫(kù)中的通用類(lèi)庫(kù)。
- interactiveMode,Maven執(zhí)行過(guò)程中是否需要接受用戶輸入,默認(rèn)值為true。
- usePluginRegistry,是否使用plugin-registry.xml文件管理Maven插件的版本,默認(rèn)為false。該文件為用戶提供了選擇,即使用指定版本的Maven插件,而非最新版本的Maven插件。該文件是從Maven 2開(kāi)始出現(xiàn)的,但是事實(shí)上更常用的是在POM中配置Maven插件的版本等參數(shù),所以u(píng)sePluginRegistry參數(shù)往往為false。另外,與settings.xml文件類(lèi)似,plugin-registry.xml文件也有全局和用戶之分。
- offline,是否支持離線構(gòu)建系統(tǒng),默認(rèn)值為false。如果build服務(wù)器由于網(wǎng)絡(luò)或者安全等原因不能連接遠(yuǎn)程庫(kù),則該參數(shù)設(shè)置為true。
- pluginGroups,給出Maven插件所在的groupId,一個(gè)可能的groupId使用一個(gè)<pluginGroup>給出。該參數(shù)只是為了簡(jiǎn)化執(zhí)行Maven時(shí)的參數(shù),如為了執(zhí)行如下命令:
mvn org.mortbay.jetty:jetty-maven-plugin:run
如果在settings.xml文件中配置了如下<pluginGroup>:
<pluginGroups> <pluginGroup>org.mortbay.jetty</pluginGroup> </pluginGroups >
則可以直接執(zhí)行如下命令:
mvn jetty:run
servers,給出用以下載或部署類(lèi)庫(kù)的服務(wù)器信息
mirrors,給出指定類(lèi)庫(kù)的鏡像服務(wù)器信息
proxies,給出代理服務(wù)器信息
profiles,給出可用的profile,這里的profile類(lèi)似于POM中的profile,但是只包含activation, repositories, pluginRepositories和properties等與project無(wú)關(guān)的信息。
activeProfiles,默認(rèn)采用的profile,可以有多個(gè)profile。
mirrors
<mirror> <id>mirrorId</id> <mirrorOf>repositoryId</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://my.repository.com/repo/path</url> </mirror>
- 鏡像庫(kù)的id,用以唯一標(biāo)識(shí)該鏡像庫(kù),默認(rèn)default
- 鏡像庫(kù)的url,即該鏡像庫(kù)訪問(wèn)位置
- 鏡像庫(kù)的name,鏡像庫(kù)的名字
- 最后,也是最重要的,是要鏡像的遠(yuǎn)程庫(kù)。例如,如果要鏡像Maven的central庫(kù),則設(shè)置<mirrorOf>central</mirrorOf>
對(duì)于mirrorOf參數(shù),如果該鏡像庫(kù)的目標(biāo)遠(yuǎn)程庫(kù)不止一個(gè),則可以使用 * 表示任意遠(yuǎn)程庫(kù);
external:*表示任何不在localhost和文件系統(tǒng)中的遠(yuǎn)程庫(kù);
r1,r2表示r1庫(kù)或者r2庫(kù);
*,!r1表示除了r1庫(kù)之外的任何遠(yuǎn)程庫(kù)。
此外,定義鏡像庫(kù)還可以提供 layout(默認(rèn)default), mirrorOfLayouts(默認(rèn)default,legacy)。
Servers
遠(yuǎn)程庫(kù)通常在POM中定義,但是遠(yuǎn)程庫(kù)所在的服務(wù)器信息,如訪問(wèn)用戶名、密碼等,往往因?yàn)椴贿m合與POM一起發(fā)布,所以需要在settings.xml文件中設(shè)置。
<server> <id>deploymentRepo</id> <username>repouser</username> <password>repopwd</password> <id>siteServer</id> <privateKey>/path/to/private/key</privateKey> <passphrase>optional; leave empty if not used.</passphrase> </server>
id,服務(wù)器的ID,Maven在連接一個(gè)庫(kù)或者鏡像的時(shí)候,通過(guò)id匹配要連接的服務(wù)器;
username, password,連接服務(wù)器所需的認(rèn)證信息;
privateKey, passphrase,連接服務(wù)器所需的認(rèn)證信息。privateKey默認(rèn)位于${user.home}/.ssh/id_dsa;
filePermissions, directoryPermissions,庫(kù)中的文件訪問(wèn)權(quán)限和目錄訪問(wèn)權(quán)限。該值的格式采用3位數(shù)字,兼容UNIX/Linux下格式;
configuration,訪問(wèn)服務(wù)器輔助要傳遞的參數(shù),通常不必要;
Proxies
<proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <username>proxyuser</username> <password>proxypass</password> <host>proxy.host.net</host> <port>80</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy>
- id,代理的ID,默認(rèn)default
- active,是否激活該代理,默認(rèn)true
- protocol,代理服務(wù)器的協(xié)議,默認(rèn)http
- username,password,代理服務(wù)器用戶名,密碼
- host,代理服務(wù)器的主機(jī)
- port,代理服務(wù)器的端口,默認(rèn)8080
- nonProxyHosts,不使用代理服務(wù)器的域名,多個(gè)域名使用|分割
Pom.xml解析
Maven的pom.xml文件簡(jiǎn)稱(chēng)POM (Project Object Model),是Maven項(xiàng)目的配置和管理核心。
pom.xml文件包含大量配置信息,這些信息大致可以分為5類(lèi)。
1.POM的模型版本
<modelVersion>4.0.0</modelVersion> //說(shuō)明:在Maven2和Maven3中,只支持4.0.0版本。
2.基本配置
<groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <properties>...</properties>
3.Build配置
<build>...</build> <reporting>...</reporting>
4.環(huán)境配置
<issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <distributionManagement>...</distributionManagement> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <profiles>...</profiles>
- issueManagement,給出defect tracking system及其訪問(wèn)URL
system
url
- ciManagement,給出Continuous Integration Management、其URL和notifier
system
url
notifiers,集成過(guò)程中發(fā)生事件,以某種方式(如mail)通知開(kāi)發(fā)人員
- scm,software configuration management
connection,用戶使用的URI,能夠只讀地訪問(wèn)版本控制系統(tǒng)
developerConnection,開(kāi)發(fā)人員使用URI,能夠讀寫(xiě)地訪問(wèn)版本控制系統(tǒng)
tag,項(xiàng)目當(dāng)前的tag
url,可通過(guò)Web瀏覽器訪問(wèn)的公共網(wǎng)址
- distributionManagement,構(gòu)件的發(fā)布管理,詳情見(jiàn)后續(xù)文章
- prerequisites,POM執(zhí)行的前提條件,目前只支持對(duì)Maven版本的要求
maven
- mailingLists,開(kāi)發(fā)人員或用戶的郵件列表
name
subscribe,訂閱地址
unsubscribe,取消訂閱地址
post,POST郵件的目的地址
archive,打包的郵件列表歷史記錄
otherArchives,鏡像打包的郵件列表歷史記錄
5.其他信息
<name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors>
- name,項(xiàng)目的名稱(chēng)代號(hào)
- description,項(xiàng)目的說(shuō)明
- url,項(xiàng)目的官網(wǎng)URL
- inceptionYear,項(xiàng)目的開(kāi)發(fā)年份
- licenses,項(xiàng)目使用的License。其中可以包含多個(gè)license,license具體又包含如下子屬性
name,license的名稱(chēng)
url,license可訪問(wèn)的URL地址
distribution,license發(fā)布的方式。repo表示可以直接從Maven庫(kù)下載,manual表示必須手工安裝
comments,對(duì)license的說(shuō)明
organization,包含組織的name,組織的官網(wǎng)url
developers,其中的developer包含id, name, email, url, organization, organizationUrl, roles, timezone, properties屬性(properties是可以自定義的各種必要屬性)
contributors,其中的contributor包含與developer基本相同的屬性,除了沒(méi)有id屬性之外
packaging
packaging給出了項(xiàng)目的打包類(lèi)型,即作為項(xiàng)目的發(fā)布形式,其可能的類(lèi)型。在Maven 3中,其可用的打包類(lèi)型如下:
• jar,默認(rèn)類(lèi)型
• war
• ejb
• ear
• rar
• par
• pom
• maven-plugin
multi-modules
Maven 3支持Maven項(xiàng)目的多模塊(multi-modules)結(jié)構(gòu)。這樣的Maven項(xiàng)目也被稱(chēng)為聚合項(xiàng)目,通常由一個(gè)父模塊和若干個(gè)子模塊構(gòu)成。
其中,父模塊必須以pom打包類(lèi)型,同時(shí)以<modules>給出所有的子模塊。父模塊的POM示例(其中的每個(gè)module,都是另外一個(gè)Maven項(xiàng)目)
... <packaging>pom</packaging> <modules> <module>my-frontend-project</module> <module>my-service-project</module> <module>my-backend-project</module> </modules> ...
Maven項(xiàng)目的繼承
Maven項(xiàng)目之間不僅存在多模塊的聚合關(guān)系,而且Maven項(xiàng)目之間還可以存在相互繼承的關(guān)系。Maven項(xiàng)目之間的繼承關(guān)系通過(guò)<parent>表示,在子Maven項(xiàng)目的POM中配置示例如下:
<parent> <groupId>com.ericsson.jcat</groupId> <artifactId>jcat-bundle</artifactId> <version>2.0</version> <relativePath>../jcat-bundle</relativePath> </parent>
其中的relativePath給出父項(xiàng)目相對(duì)于子項(xiàng)目的路徑,這樣在構(gòu)件子項(xiàng)目時(shí)首先從該相對(duì)路徑查找父項(xiàng)目,如果沒(méi)有才會(huì)從本地庫(kù)或進(jìn)而遠(yuǎn)程庫(kù)中查找父項(xiàng)目。
在子項(xiàng)目中,能夠繼承父項(xiàng)目的如下配置:
• dependencies
• developers
• contributors
• plugin lists
• reports lists
• plugin executions with matching ids
• plugin configuration
dependencies
Maven項(xiàng)目的構(gòu)建往往要依賴(lài)于第三方的類(lèi)庫(kù)。通過(guò)<dependencies>可以給出Maven項(xiàng)目所依賴(lài)的第三方類(lèi)庫(kù)
<dependencies>
<dependency>
<groupId>org.gitlab</groupId>
<artifactId>java-gitlab-api</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>
對(duì)于一個(gè)依賴(lài)<dependency>,首先要給出被依賴(lài)的Maven構(gòu)件(被依賴(lài)的只能是Maven構(gòu)件)的具體標(biāo)識(shí)信息,如groupId、artifactId和version(可以是一個(gè)范圍)。為了進(jìn)一步區(qū)分Maven構(gòu)件的內(nèi)容(如source、bin和doc),往往還會(huì)給出Maven構(gòu)件的classifier。
type,打包類(lèi)型,默認(rèn)jar
scope,被依賴(lài)的Maven構(gòu)件在classpath中的可訪問(wèn)范圍
compile,默認(rèn)值,被依賴(lài)的Maven構(gòu)件在compile、runtime和test的時(shí)候都可以在classpath中找到
provided,被依賴(lài)的Maven構(gòu)件在compile和test的時(shí)候都可以在classpath中找到,在runtime的時(shí)候由JDK或容器提供
system,被依賴(lài)的Maven構(gòu)件在compile和test的時(shí)候都可以在classpath中找到,在runtime的時(shí)候必須顯式將JAR加入到classpath中
runtime,被依賴(lài)的Maven構(gòu)件在runtime和test的時(shí)候都可以在classpath中找到,在compile時(shí)不是必須的
test,被依賴(lài)的Maven構(gòu)件在test的時(shí)候可以在classpath中找到,在compile和runtime時(shí)不是必須的
systemPath,只有當(dāng)<scope>system</scope>時(shí)才設(shè)置,否則構(gòu)建時(shí)會(huì)報(bào)錯(cuò)。該值必須是一個(gè)絕對(duì)路徑,可以通過(guò)環(huán)境變量給出具體的絕對(duì)路徑
optional,當(dāng)前Maven項(xiàng)目的構(gòu)件被其他項(xiàng)目依賴(lài),此處被依賴(lài)的Maven構(gòu)件相對(duì)于其他項(xiàng)目來(lái)說(shuō)是不必須的
exclusions,將一個(gè)被依賴(lài)的Maven構(gòu)件中的部分類(lèi)庫(kù),從classpath中去掉
Properties
在Maven的pom.xml文件中,<properties>用于定義全局變量,在POM中通過(guò)${property_name}的形式引用變量的值。
Maven生命周期
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html(官網(wǎng)解說(shuō))
Maven強(qiáng)大的一個(gè)重要的原因是它有一個(gè)十分完善的生命周期模型(lifecycle),這個(gè)生命周期可以從兩方面來(lái)理解,第一,顧名思義,運(yùn)行Maven的每個(gè)步驟都由它來(lái)定義的,這種預(yù)定義的默認(rèn)行為使得我們使用Maven變得簡(jiǎn)單,相比而言,Ant的每個(gè)步驟都要你手工去定義。第二,這個(gè)模型是一種標(biāo)準(zhǔn),在不同的項(xiàng)目中,使用Maven的接口是一樣的,這樣就不用去仔細(xì)理解每個(gè)項(xiàng)目的構(gòu)建了,一般情況下,mvn clean install 這樣的命令是通用的。
Maven有三套相互獨(dú)立的生命周期,請(qǐng)注意這里說(shuō)的是“三套”,而且“相互獨(dú)立”,很多人容易將Maven的生命周期看成一個(gè)整體,其實(shí)不然。這三套生命周期分別是:
Clean Lifecycle 在進(jìn)行真正的構(gòu)建之前進(jìn)行一些清理工作。
Default Lifecycle 構(gòu)建的核心部分,編譯,測(cè)試,打包,部署等等。
Site Lifecycle 生成項(xiàng)目報(bào)告,站點(diǎn),發(fā)布站點(diǎn)。
每套生命周期都由一組階段(Phase)組成,我們平時(shí)在命令行輸入的命令總會(huì)對(duì)應(yīng)于一個(gè)特定的階段。比如,運(yùn)行mvn clean ,這個(gè)的clean是Clean生命周期的一個(gè)階段。
Clean生命周期一共包含了三個(gè)階段:
• pre-clean 執(zhí)行一些需要在clean之前完成的工作
• clean 移除所有上一次構(gòu)建生成的文件
• post-clean 執(zhí)行一些需要在clean之后立刻完成的工作
mvn clean 中的clean就是上面的clean,在一個(gè)生命周期中,運(yùn)行某個(gè)階段的時(shí)候,它之前的所有階段都會(huì)被運(yùn)行,也就是說(shuō),mvn clean 等同于 mvn pre-clean clean ,如果我們運(yùn)行 mvn post-clean ,那么 pre-clean,clean 都會(huì)被運(yùn)行。這是Maven很重要的一個(gè)規(guī)則,可以大大簡(jiǎn)化命令行的輸入。
下面看一下Site生命周期的各個(gè)階段:
• pre-site 執(zhí)行一些需要在生成站點(diǎn)文檔之前完成的工作
• site 生成項(xiàng)目的站點(diǎn)文檔
• post-site 執(zhí)行一些需要在生成站點(diǎn)文檔之后完成的工作,并且為部署做準(zhǔn)備
• site-deploy 將生成的站點(diǎn)文檔部署到特定的服務(wù)器上
這里經(jīng)常用到的是site階段和site-deploy階段,用以生成和發(fā)布Maven站點(diǎn),這可是Maven相當(dāng)強(qiáng)大的功能,Manager比較喜歡,文檔及統(tǒng)計(jì)數(shù)據(jù)自動(dòng)生成,很好看。
Maven的最重要的Default生命周期
• validate
• generate-sources
• process-sources
• generate-resources
• process-resources 復(fù)制并處理資源文件,至目標(biāo)目錄,準(zhǔn)備打包。
• compile 編譯項(xiàng)目的源代碼。
• process-classes
• generate-test-sources
• process-test-sources
• generate-test-resources
• process-test-resources 復(fù)制并處理資源文件,至目標(biāo)測(cè)試目錄。
• test-compile 編譯測(cè)試源代碼。
• process-test-classes
• test 使用合適的單元測(cè)試框架運(yùn)行測(cè)試。這些測(cè)試代碼不會(huì)被打包或部署。
• prepare-package
• package 接受編譯好的代碼,打包成可發(fā)布的格式,如 JAR 。
• pre-integration-test
• integration-test
• post-integration-test
• verify
• install 將包安裝至本地倉(cāng)庫(kù),以讓其它項(xiàng)目依賴(lài)。
• deploy 將最終的包復(fù)制到遠(yuǎn)程的倉(cāng)庫(kù),以讓其它開(kāi)發(fā)人員與項(xiàng)目共享。
記住,運(yùn)行任何一個(gè)階段的時(shí)候,它前面的所有階段都會(huì)被運(yùn)行,這也就是為什么我們運(yùn)行mvn install 的時(shí)候,代碼會(huì)被編譯,測(cè)試,打包。
Maven常用命令
Maven參數(shù)
-D 傳入屬性參數(shù)
-P 使用pom中指定的配置
-e 顯示maven運(yùn)行出錯(cuò)的信息
-o 離線執(zhí)行命令,即不去遠(yuǎn)程倉(cāng)庫(kù)更新包
-X 顯示maven允許的debug信息
-U 強(qiáng)制去遠(yuǎn)程參考更新snapshot包
Maven常用命令
創(chuàng)建Maven的普通java項(xiàng)目:
mvn archetype:create -DgroupId=packageName -DartifactId=projectName
創(chuàng)建Maven的Web項(xiàng)目:
mvn archetype:create -DgroupId=packageName -DartifactId=webappName-DarchetypeArtifactId=maven-archetype-webapp
編譯源代碼:mvn compile
編譯測(cè)試代碼:mvn test-compile
運(yùn)行測(cè)試:mvn test
產(chǎn)生site:mvn site
打包:mvn package
在本地Repository中安裝jar:mvn install
清除產(chǎn)生的項(xiàng)目:mvn clean
生成eclipse項(xiàng)目:mvn eclipse:eclipse
生成idea項(xiàng)目:mvn idea:idea
組合使用goal命令,如只打包不測(cè)試:mvn -Dtest package
編譯測(cè)試的內(nèi)容:mvn test-compile
只打jar包: mvn jar:jar
只測(cè)試而不編譯,也不測(cè)試編譯:
mvn test -skipping compile -skipping test-compile
( -skipping 的靈活運(yùn)用,當(dāng)然也可以用于其他組合命令)
清除eclipse的一些系統(tǒng)設(shè)置:mvn eclipse:clean
ps:一般使用情況是這樣,首先通過(guò)cvs或svn下載代碼到本機(jī),然后執(zhí)行mvn eclipse:eclipse生成ecllipse項(xiàng)目文件,然后導(dǎo)入到eclipse就行了;修改代碼后執(zhí)行mvn compile或mvn test檢驗(yàn),也可以下載eclipse的maven插件。
mvn -version/-v 顯示版本信息
mvn archetype:generate 創(chuàng)建mvn項(xiàng)目
mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app 創(chuàng)建mvn項(xiàng)目
mvn package 生成target目錄,編譯、測(cè)試代碼,生成測(cè)試報(bào)告,生成jar/war文件
mvn jetty:run 運(yùn)行項(xiàng)目于jetty上,
mvn compile 編譯
mvn test 編譯并測(cè)試
mvn clean 清空生成的文件
mvn site 生成項(xiàng)目相關(guān)信息的網(wǎng)站
mvn -e 顯示詳細(xì)錯(cuò)誤 信息.
mvn validate 驗(yàn)證工程是否正確,所有需要的資源是否可用。
mvn test-compile 編譯項(xiàng)目測(cè)試代碼。 。
mvn integration-test 在集成測(cè)試可以運(yùn)行的環(huán)境中處理和發(fā)布包。
mvn verify 運(yùn)行任何檢查,驗(yàn)證包是否有效且達(dá)到質(zhì)量標(biāo)準(zhǔn)。
mvn generate-sources 產(chǎn)生應(yīng)用需要的任何額外的源代碼,如xdoclet。
發(fā)布第三方Jar到本地庫(kù)中:
mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DdownloadSources=true -DdownloadJavadocs=true
總結(jié)
以上所述是小編給大家介紹的Maven 配置文件 生命周期 常用命令詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
解決Java項(xiàng)目啟動(dòng)報(bào)錯(cuò):Logback?configuration?error?detected:問(wèn)題
這篇文章主要介紹了解決Java項(xiàng)目啟動(dòng)報(bào)錯(cuò):Logback?configuration?error?detected:問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
java8 LocalDate LocalDateTime等時(shí)間類(lèi)用法實(shí)例分析
這篇文章主要介紹了java8 LocalDate LocalDateTime等時(shí)間類(lèi)用法,結(jié)合具體實(shí)例形式分析了LocalDate、LocalTime、LocalDateTime等日期時(shí)間相關(guān)類(lèi)的功能與具體使用技巧,需要的朋友可以參考下2017-04-04
開(kāi)源的Java圖片處理庫(kù)實(shí)例詳解
Java?圖片處理庫(kù)提供了豐富的功能,用于處理和增強(qiáng)圖像,在Java生態(tài)系統(tǒng)中,有幾個(gè)流行的開(kāi)源庫(kù)可以用于圖片處理,這些庫(kù)提供了豐富的功能,如圖像縮放、裁剪、顏色調(diào)整、格式轉(zhuǎn)換等,本文介紹開(kāi)源的Java圖片處理庫(kù)介紹,感興趣的朋友一起看看吧2024-03-03
java中orElse和orElseGet方法區(qū)別小結(jié)
這篇文章主要給大家介紹了關(guān)于java中orElse和orElseGet方法區(qū)別的相關(guān)資料,兩者之間的區(qū)別細(xì)微,但是卻在某些場(chǎng)景下顯的很重要,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
Spring IOC 能降低耦合的問(wèn)題分析及解決方法
這篇文章主要介紹了Spring IOC 為什么能降低耦合,依賴(lài)注入是調(diào)用者僅通過(guò)聲明某個(gè)組件就可以獲得組件的控制權(quán),而對(duì)該組件的依賴(lài)關(guān)系管理、查找、加載由外部完成,需要的朋友可以參考下2022-06-06
SpringBoot整合SQLite數(shù)據(jù)庫(kù)全過(guò)程
sqlite是一個(gè)很輕量級(jí)的數(shù)據(jù)庫(kù),可以滿足日常sql的需求,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合SQLite數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03

