Eclipse下maven使用的常見(jiàn)問(wèn)題及scope詳解

Eclipse下maven使用的常見(jiàn)問(wèn)題及scope詳解

前言

在Eclipse下使用Maven,著實(shí)有些不足之處,以至于經(jīng)常有人問(wèn)到Maven相關(guān)的問(wèn)題,故此在這里做個(gè)總結(jié),以便大家查閱。有的涉及原理的東西,也一一講解,這樣能舉一反三。

怎么創(chuàng)建Maven項(xiàng)目

eclipse支持maven項(xiàng)目的創(chuàng)建,如果你希望不要等待那么久,直接跳過(guò)架構(gòu)選擇即可,但是你需要清晰地知道Maven的項(xiàng)目結(jié)構(gòu),他應(yīng)該是這個(gè)樣子:??Eclipse中的Maven項(xiàng)目對(duì)


文件夾的結(jié)構(gòu)解析是自動(dòng)的,對(duì)應(yīng)的關(guān)系如上圖。?如果你創(chuàng)建的項(xiàng)目的結(jié)構(gòu)不是如此,可以手動(dòng)添加對(duì)應(yīng)文件夾,Eclipse可以自動(dòng)識(shí)別。注意所有文件夾的創(chuàng)建都應(yīng)該在src下。當(dāng)然,SpringBoot的web內(nèi)容是直接仿到resouces下面的,那是SpringBoot內(nèi)置的對(duì)靜態(tài)資源的處理。

如何設(shè)置JDK版本

很多人發(fā)現(xiàn)創(chuàng)建完的Eclipse的Maven項(xiàng)目,在Project?Facts中看到的Java的版本居然是1.5這個(gè)上古時(shí)代的版本,實(shí)際上我們只需要在Maven中添加這么一段代碼就可以了:

<build>

????<plugins>

????????<plugin>

????????????<groupId>org.apache.maven.plugins</groupId>

????????????<artifactId>maven-compiler-plugin</artifactId>

????????????<configuration>

????????????????<source>1.8</source>

????????????????<target>1.8</target>

????????????</configuration>

????????</plugin>

</plugins>

</build>

項(xiàng)目菜單中的Update Project是什么原理

Eclipse實(shí)際上對(duì)Maven的支持并不算完備,其中一個(gè)特點(diǎn)就是Eclipse仍按照自己的方式來(lái)管理Maven項(xiàng)目,當(dāng)我們修改了POM配置后,Maven并不能自動(dòng)讀取理解。而且Eclipse會(huì)嘗試通過(guò)POM配置自動(dòng)匹配一些Eclipse內(nèi)置配置,比如嘗試為web項(xiàng)目自動(dòng)添加webService的支持等。?修改pom后,單擊項(xiàng)目右鍵選擇Maven->Update?Project的功能就是讀取POM配置并使用Eclipse的方式來(lái)更新項(xiàng)目的配置。比如,上面的修改Java版本的代碼改動(dòng)后,你就應(yīng)該執(zhí)行這個(gè)操作:??簡(jiǎn)單說(shuō)來(lái),所有pom文件的更新,如果沒(méi)有及時(shí)反饋到Eclipse的項(xiàng)目屬性中,你都可以執(zhí)行這個(gè)菜單,快捷鍵為alt+?F5。

從哪里搜索依賴,如何選擇版本

原來(lái)的maven.aliyun.com是可以搜索包的,但是現(xiàn)在只能作為庫(kù)使用了。搜索庫(kù),最佳去處,自然是https://mvnrepository.com/,搜索后直接復(fù)制pom就可以了。

關(guān)于版本選擇問(wèn)題,一方面要考慮版本之間的沖突,這是第一原則。其次,如果有多個(gè)版本可選(比如日志框架),那么選擇下載次數(shù)最多的基本不會(huì)錯(cuò),如下圖:


什么時(shí)候需要設(shè)置scope

scope是對(duì)dependency的管理措施,scope的可用值有下面幾個(gè):

1、?compile?這是默認(rèn)的scope,表示在運(yùn)行,打包,測(cè)試幾個(gè)聲明周期中,對(duì)應(yīng)的jar包都是存在可用的,最典型的是如果你設(shè)置了某個(gè)dependency的scope不為compile,則你會(huì)發(fā)現(xiàn)打包后war文件中沒(méi)有對(duì)應(yīng)的jar包。

system?這個(gè)scope可以用來(lái)引用maven庫(kù)無(wú)法下載的包,比如你公司自己的jar包,如果沒(méi)有maven私服,這是一個(gè)快捷的解決辦法,典型的例子是谷歌的驗(yàn)證碼插件:

<dependency>

<groupId>com.google.code</groupId>

<artifactId>kaptcha</artifactId>

<version>2.3.2</version>

</dependency>

大家可以嘗試后發(fā)現(xiàn)提示無(wú)法直接下載,解決的辦法是https://mvnrepository.com/中搜索到對(duì)應(yīng)版本后找到j(luò)ar包下載,然后放到項(xiàng)目的某個(gè)文件夾中,用下面的代碼實(shí)現(xiàn)引用:

<dependency>

<groupId>com.google.code</groupId>

<artifactId>kaptcha</artifactId>

<version>2.3.2</version>

<scope>system</scope>

<systemPath>${project.basedir}/libs/kaptcha-2.3.2.jar</systemPath>

</dependency>

3、provided?provided表示將來(lái)的運(yùn)行環(huán)境會(huì)提供該jar包,它在編輯代碼時(shí)段,maven打包階段都可用,但不會(huì)打包到結(jié)果中,比如tomcat自帶的包,比如servlet-api,可以這樣寫:

<dependency>

<groupId>javax</groupId>

<artifactId>javaee-api</artifactId>

<version>7.0</version>

<scope>provided</scope>

</dependency>

這樣就不用使用eclipse的方式也就是添加對(duì)tomcat運(yùn)行時(shí)的build?path了。

4.

test表示引用的jar包僅在測(cè)試類中有效,比如下面的兩張圖說(shuō)明了這個(gè)問(wèn)題:Eclipse認(rèn)識(shí)不同的作用域。

當(dāng)然test?scope的jar包也不會(huì)被打包到結(jié)果包中,比如war中。

5、runtime?這個(gè)作用域用來(lái)表示該jar包僅在運(yùn)行時(shí)可用,及在編譯打包期間不需要,與compiler相比,僅跳過(guò)編譯步驟。

Maven的源設(shè)置及本地倉(cāng)庫(kù)設(shè)置

本地倉(cāng)庫(kù),默認(rèn)存放緩存位置是在C盤,C盤是多么重要的地盤,maven依賴不小哇,動(dòng)不動(dòng)就是幾個(gè)G,所以還是將其轉(zhuǎn)移吧,代碼參考下面的講述。?使用aliyun的maven源仍然是最快的,設(shè)置的辦法有兩種,一個(gè)是修改eclipse的maven設(shè)置中的settings.xml:

<?xml?version="1.0"?encoding="UTF-8"?><settingsxmlns="http://maven.apache.org/SETTINGS/1.0.0"

??????????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

??????????xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0?http://maven.apache.org/xsd/settings-1.0.0.xsd">

??<localRepository>D:\mavenrepo</localRepository>

??<mirrors>??

?????<mirror>??

??????<id>alimaven</id>??

??????<mirrorOf>central</mirrorOf>??

??????<name>aliyun maven</name>??

??????<url>http://maven.aliyun.com/nexus/content/groups/public/</url>??

????</mirror>??

??</mirrors>??</settings>

一個(gè)是在pom中添加源設(shè)置(pom的根節(jié)點(diǎn)下):

<repositories>

<repository>

<id>public</id>

<name>aliyun nexus</name>

<url>http://maven.aliyun.com/nexus/content/groups/public/</url>

<releases>

<enabled>true</enabled>

</releases>

</repository>

</repositories>


需要和原創(chuàng)作者溝通交流技術(shù),或者說(shuō)有問(wèn)題需要幫助解答的話,可以留言回復(fù),大家也可以關(guān)注我下 ?以后給大家?guī)?lái)更多的精彩內(nèi)容

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Maven使用入門 1. Maven概述 Maven是什么?Maven項(xiàng)目對(duì)象模型(POM),可以通過(guò)一小段描述信...
    小小韓_小小紅閱讀 2,826評(píng)論 2 28
  • Maven的基本了解 什么是Maven? Maven就是Apache下的一個(gè)開(kāi)源項(xiàng)目。它是用純java開(kāi)發(fā)的。是一...
    Bcome閱讀 3,142評(píng)論 0 7
  • Maven編譯代碼的相關(guān)命令 第一、main目錄下的主代碼編寫完畢后,使用Maven進(jìn)行編譯,在項(xiàng)目根目錄下運(yùn)行命...
    加油小杜閱讀 1,438評(píng)論 0 2
  • 一年365天 一天被三餐劃分 我到底是活了365天? 還是活了一天 重復(fù)了三百六十五次? 大學(xué)總是給我一種時(shí)間很多...
    薇嶼獨(dú)白閱讀 920評(píng)論 1 1
  • (一)被迫幫忙 北方的春季,白天比較短。 放學(xué)后趕緊寫作業(yè),待收拾起本子后,天已經(jīng)朦朦朧朧。爸爸開(kāi)著家里的農(nóng)用車?yán)?..
    娜娜可妮醬閱讀 374評(píng)論 2 1

友情鏈接更多精彩內(nèi)容