Eclipse下maven使用的常見問題及scope詳解

Eclipse下maven使用的常見問題及scope詳解

前言

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

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

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


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

如何設(shè)置JDK版本

很多人發(fā)現(xiàn)創(chuàng)建完的Eclipse的Maven項目,在Project?Facts中看到的Java的版本居然是1.5這個上古時代的版本,實際上我們只需要在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>

項目菜單中的Update Project是什么原理

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

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

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

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


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

scope是對dependency的管理措施,scope的可用值有下面幾個:

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

system?這個scope可以用來引用maven庫無法下載的包,比如你公司自己的jar包,如果沒有maven私服,這是一個快捷的解決辦法,典型的例子是谷歌的驗證碼插件:

<dependency>

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

<artifactId>kaptcha</artifactId>

<version>2.3.2</version>

</dependency>

大家可以嘗試后發(fā)現(xiàn)提示無法直接下載,解決的辦法是https://mvnrepository.com/中搜索到對應(yīng)版本后找到j(luò)ar包下載,然后放到項目的某個文件夾中,用下面的代碼實現(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表示將來的運行環(huán)境會提供該jar包,它在編輯代碼時段,maven打包階段都可用,但不會打包到結(jié)果中,比如tomcat自帶的包,比如servlet-api,可以這樣寫:

<dependency>

<groupId>javax</groupId>

<artifactId>javaee-api</artifactId>

<version>7.0</version>

<scope>provided</scope>

</dependency>

這樣就不用使用eclipse的方式也就是添加對tomcat運行時的build?path了。

4.

test表示引用的jar包僅在測試類中有效,比如下面的兩張圖說明了這個問題:Eclipse認識不同的作用域。

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

5、runtime?這個作用域用來表示該jar包僅在運行時可用,及在編譯打包期間不需要,與compiler相比,僅跳過編譯步驟。

Maven的源設(shè)置及本地倉庫設(shè)置

本地倉庫,默認存放緩存位置是在C盤,C盤是多么重要的地盤,maven依賴不小哇,動不動就是幾個G,所以還是將其轉(zhuǎn)移吧,代碼參考下面的講述。?使用aliyun的maven源仍然是最快的,設(shè)置的辦法有兩種,一個是修改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>

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

<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ù),或者說有問題需要幫助解答的話,可以留言回復(fù),大家也可以關(guān)注我下 ?以后給大家?guī)砀嗟木蕛?nèi)容

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

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

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