Eclipse下maven使用的常見問題及scope詳解
前言
在Eclipse下使用Maven,著實有些不足之處馋没,以至于經(jīng)常有人問到Maven相關(guān)的問題,故此在這里做個總結(jié)降传,以便大家查閱篷朵。有的涉及原理的東西,也一一講解搬瑰,這樣能舉一反三款票。
怎么創(chuàng)建Maven項目
eclipse支持maven項目的創(chuàng)建,如果你希望不要等待那么久泽论,直接跳過架構(gòu)選擇即可艾少,但是你需要清晰地知道Maven的項目結(jié)構(gòu),他應該是這個樣子:??Eclipse中的Maven項目對
文件夾的結(jié)構(gòu)解析是自動的翼悴,對應的關(guān)系如上圖缚够。?如果你創(chuàng)建的項目的結(jié)構(gòu)不是如此,可以手動添加對應文件夾鹦赎,Eclipse可以自動識別谍椅。注意所有文件夾的創(chuàng)建都應該在src下。當然古话,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項目,當我們修改了POM配置后摘完,Maven并不能自動讀取理解姥饰。而且Eclipse會嘗試通過POM配置自動匹配一些Eclipse內(nèi)置配置,比如嘗試為web項目自動添加webService的支持等孝治。?修改pom后列粪,單擊項目右鍵選擇Maven->Update?Project的功能就是讀取POM配置并使用Eclipse的方式來更新項目的配置。比如,上面的修改Java版本的代碼改動后,你就應該執(zhí)行這個操作:??簡單說來胶背,所有pom文件的更新,如果沒有及時反饋到Eclipse的項目屬性中掺逼,你都可以執(zhí)行這個菜單,快捷鍵為alt+?F5瓤介。
從哪里搜索依賴,如何選擇版本
原來的maven.aliyun.com是可以搜索包的赘那,但是現(xiàn)在只能作為庫使用了刑桑。搜索庫,最佳去處募舟,自然是https://mvnrepository.com/祠斧,搜索后直接復制pom就可以了。
關(guān)于版本選擇問題拱礁,一方面要考慮版本之間的沖突琢锋,這是第一原則。其次呢灶,如果有多個版本可選(比如日志框架)吴超,那么選擇下載次數(shù)最多的基本不會錯,如下圖:
什么時候需要設(shè)置scope
scope是對dependency的管理措施鸯乃,scope的可用值有下面幾個:
1鲸阻、?compile?這是默認的scope,表示在運行缨睡,打包鸟悴,測試幾個聲明周期中,對應的jar包都是存在可用的奖年,最典型的是如果你設(shè)置了某個dependency的scope不為compile细诸,則你會發(fā)現(xiàn)打包后war文件中沒有對應的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/中搜索到對應版本后找到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認識不同的作用域收恢。
當然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ù),或者說有問題需要幫助解答的話瑟啃,可以留言回復论泛,大家也可以關(guān)注我下 ?以后給大家?guī)砀嗟木蕛?nèi)容