溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Maven命令怎么使用

發(fā)布時間:2021-12-14 14:45:16 來源:億速云 閱讀:148 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“Maven命令怎么使用”,在日常操作中,相信很多人在Maven命令怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Maven命令怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

快速創(chuàng)建一個 Maven 項目

Maven Archetype 介紹

如何快速創(chuàng)建一個 Maven 項目,可以通過 Maven 的 Archetype 來進(jìn)行創(chuàng)建,Archetype 是 Maven 提供的各種各樣的工程模板,通過這些模板可以生成不同的 Maven 項目結(jié)構(gòu)。

Maven 提供的 Archetype 列表如下:

Archetype ArtifactIdsDescription
maven-archetype-archetypegenerate a sample archetype project.
maven-archetype-j2ee-simplegenerate a simplifed sample J2EE application.
maven-archetype-mojogenerate a sample a sample Maven plugin.
maven-archetype-plugingenerate a sample Maven plugin.
maven-archetype-plugin-sitegenerate a sample Maven plugin site.
maven-archetype-portletgenerate a sample JSR-268 Portlet.
maven-archetype-quickstartgenerate a sample Maven project.
maven-archetype-simplegenerate a simple Maven project.
maven-archetype-sitegenerate a sample Maven site which demonstrates some of the supported document types like APT, XDoc, and FML and demonstrates how to i18n your site.
maven-archetype-site-simplegenerate a sample Maven site.
maven-archetype-webappgenerate a sample Maven Webapp project.

這里我們選擇 maven-archetype-quickstart 這個模板進(jìn)行快速創(chuàng)建,因為它提供了一個標(biāo)準(zhǔn)的項目結(jié)構(gòu),基于這個基本項目結(jié)構(gòu)可以進(jìn)行后續(xù)擴展。

project
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- $package
    |           `-- App.java
    `-- test
        `-- java
            `-- $package
                `-- AppTest.java
生成 Maven 項目

1)通過 Maven 命令

Maven 提供了命令快速創(chuàng)建 Maven 項目:

mvn archetype:generate
-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-quickstart
-DarchetypeVersion=1.4

命令中指定我們前面所說的 Maven Archetype:maven-archetype-quickstart 信息。

Maven命令怎么使用

運行過程中會提示讓你輸入項目的 Naven 坐標(biāo)信息,直到創(chuàng)建完成?;A(chǔ)部分這里不撰述了,需要完整 Maven 教程的關(guān)注公眾號Java技術(shù)棧在后臺回復(fù)"mvn"獲取。

2)通過 IDEs

通過 IDE 也能快速創(chuàng)建 Maven 項目,現(xiàn)在 Java IDEs 都支持 Maven 或者自帶 Maven 插件,下面以 Intellij IDEA 為例進(jìn)行創(chuàng)建。

選擇 maven-archetype-quickstart:

Maven命令怎么使用

輸入項目的 Naven 坐標(biāo)信息:

Maven命令怎么使用

選擇 Maven 及倉庫設(shè)置信息:

Maven命令怎么使用

等待項目構(gòu)建完成,如下所示:

Maven命令怎么使用

Maven 項目重構(gòu)

Maven 項目配置

項目生成后,我們就可以把原系統(tǒng)的文件移到新的 Maven 項目了,因生成的項目結(jié)構(gòu)比較簡單,Maven 提供的 maven-archetype-webapp 模板也不符合要求:

Maven命令怎么使用

我們的項目性質(zhì)又是后臺系統(tǒng),涉及到方方面面,所以還需要再完善其他資源目錄的創(chuàng)建:

- src
  - main
    - java
    - resources
    - filters
    - webapp
  - test
    - java
    - resources

這是一個比較標(biāo)準(zhǔn)的 Maven Web 項目結(jié)構(gòu),我把它弄成了一個基礎(chǔ)腳手架,還集成了各種現(xiàn)成的插件和功能,后面其他項目轉(zhuǎn) Maven 可以直接拿來套用。

已經(jīng)上傳到了 Github:

https://github.com/javastacks/maven-demo-project

主要目錄結(jié)構(gòu)介紹:

目錄說明
src/main/java源代碼目錄
src/main/resources資源目錄
src/main/filters多環(huán)境配置過濾目錄
src/main/webappWeb應(yīng)用文件目
src/test/java測試代碼目錄
src/test/resources測試資源目錄

所有目錄創(chuàng)建完后,再根據(jù)文件性質(zhì)把原系統(tǒng)所有除了(*.jar)文件移到對應(yīng)的目錄,這里沒什么難度。

配置 Maven 環(huán)境信息:

<build>
	<filters>
		<filter>src/main/filters/filter-${env}.properties</filter>
	</filters>

	<resources>
		<resource>
			<directory>src/main/resources/config</directory>
			<filtering>true</filtering>
		</resource>
		<resource>
			<directory>src/main/resources/resource</directory>
			<filtering>false</filtering>
		</resource>
	</resources>
	
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>${maven-compiler-plugin.version}</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-war-plugin</artifactId>
			<version>${maven-war-plugin.version}</version>
			<configuration>
				<failOnMissingWebXml>false</failOnMissingWebXml>
			</configuration>
		</plugin>
	</plugins>

</build>

<profiles>
	<profile>
		<id>dev</id>
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
		<properties>
			<env>dev</env>
		</properties>
	</profile>
	<profile>
		<id>test</id>
		<properties>
			<env>test</env>
		</properties>
	</profile>
	<profile>
		<id>mirror</id>
		<properties>
			<env>mirror</env>
		</properties>
	</profile>
	<profile>
		<id>prod</id>
		<properties>
			<env>prod</env>
		</properties>
	</profile>
</profiles>
Maven 依賴轉(zhuǎn)換

依賴轉(zhuǎn)換就是要把所有原系統(tǒng)的(*.jar)依賴包全部轉(zhuǎn)換為 Maven 依賴管理,這里是難點,要解決編譯、啟動、運行時遇到的 jar 包沖突、版本沖突等異常。

我的思路是先把一些核心框架的依賴進(jìn)行轉(zhuǎn)換,再進(jìn)行一些比較獨立的公共工具包的轉(zhuǎn)換,最后就是一些不熟悉的依賴轉(zhuǎn)換。

引入 Maven 依賴的時候,看下其所有附屬的所有依賴,再逐漸從 lib 目錄刪除,直到全部刪除完成即轉(zhuǎn)換完成。

在找對應(yīng)依賴的時候,如果中央倉庫找不到,其他遠(yuǎn)程倉庫能找到的,就在公司私庫中添加該包所在的遠(yuǎn)程倉庫代理配置。

如果中央倉庫或者其他遠(yuǎn)程倉庫都找不到的,比如第三方的 SDK 包,就上傳到公司私庫。怎么上傳到私庫,點擊這里閱讀,更多 Maven 教程在公眾號Java技術(shù)?;貜?fù)maven進(jìn)行閱讀。

根據(jù) JAR 包找 Maven 依賴的時候,可能有多個名稱一樣的依賴,不知道引用哪個,這時候需要去原始 JAR 包中看下包名,根據(jù)包名就大概知道坐標(biāo)信息了。

依賴傳遞:

在依賴轉(zhuǎn)換過程中,如果一個依賴又依賴了其他依賴,可以直接引用父依賴即可,如在老項目中存在:poi、poi-ooxm、poi-ooxml-schemas 這三個依賴:

Maven命令怎么使用

但在 POI 依賴體系中,poi-ooxml 包又需要依賴其他兩個包,所以只需要引入 poi-ooxml 依賴即可:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

這樣就把這個包需要依賴的其他包都引進(jìn)來了,這就是 Maven 管理依賴的好處,不會出現(xiàn)多包少包的情況,也能盡量避免依賴沖突。

依賴范圍:

在老項目中,所有 jar 包都在 web-inf/lib 目錄下,如:Servlet、JUnit,這些包在打完生產(chǎn)包之后也還在目錄下,沒有生命周期的管理。

在 Maven 中就能控制它們的生命周期:

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>${javax.servlet-api.version}</version>
	<scope>provided</scope>
</dependency>

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>${junit.version}</version>
	<scope>test</scope>
</dependency>

Servlet 只需要編譯時用到,JUnit 只需要測試時用到,控制好每個包的依賴范圍,做到每個包的作用范圍最小化。

解決沖突:

當(dāng)傳遞的依賴版本不符合,或者是同一個包出現(xiàn)不同版本導(dǎo)致沖突的時候要學(xué)會使用排除:

Maven命令怎么使用

或者強制指定包版本:

<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcprov-jdk16</artifactId>
	<version>${bctsp-jdk16.version}</version>
</dependency>

有的時候,還要根據(jù)需要使用 classifier 指定不同 JDK 的版本:

<dependency>
	<groupId>com.test</groupId>
	<artifactId>test</artifactId>
	<version>${test.version}</version>
	<classifier>JDK6</classifier>
</dependency>

如源代碼編譯報錯,不知道引用的哪個 JAR 包、或者哪個版本,可以到原始項目中點對應(yīng)的類引用進(jìn)去看就知道了。

整個改造過程比較順利,就是編譯和運行時需要解決一些 JAR 包沖突導(dǎo)致的問題,根據(jù)上面的種種方法直至編譯、啟動正常。

到此,關(guān)于“Maven命令怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI