免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
maven教程3_maven-compiler-plugin
原創(chuàng)者:文思
org.apache.maven.plugins系列插件簡介
一、插件知識簡介
簡介:
compiler插件3.0之前,默認的Java編譯器就的JDK自帶的javac。但是從Compiler插件3.0開始(需要JDK1.6),默認的Java編譯器   是javax.tools.JavaCompiler。如果仍然希望使用JDK自帶的javac編譯源代碼,就需要為mvn命令配置forceJavacCompilerUse啟動參數(shù)如:-Dmaven.compiler.forceJavacCompilerUse=true
Compiler插件編譯時和編譯后運行的JVM版本目前默認的設(shè)置為1.5,默認用此版本,而不是根據(jù)你項目中指定的jdk版本編譯。如果你想改變這些默認設(shè)置,你應(yīng)該設(shè)置編譯源和目標中java編譯器的目標,通過設(shè)置Java源代碼兼容的JVM版本,標明Java源代碼開發(fā)過程中使用的Java版本,通過設(shè)置編譯后的類庫擬運行的JVM版本,給出編譯后的類庫將要運行的Java環(huán)境(一般都會設(shè)置,因為很少有項目再用1.7以下的版本了):
同時,命令mvn的運行需要依賴JDK,Compiler插件默認使用當前運行mvn命令的JDK去編譯Java源代碼。如果想使用其他版本的JDK(比如本地java環(huán)境的,而非maven自帶的)編譯Java源代碼,則需要設(shè)置如下(重點fork 、executable、compilerVersion):
上述配置中,用以編譯Java源代碼的是JDK 1.8,運行mvn命令時指定maven所使用的是JDK為1.6
Compiler插件提供了如下2個goal,默認都已經(jīng)綁定到Maven的生命周期階段,無需單獨指出。
compiler:compile,綁定到compile 階段,用以編譯main/路徑下的源代碼
compiler:testCompile,綁定到test-compile階段,用以編譯test/路徑下的源代碼
mvn compile:
下圖看出官網(wǎng)也建議指定編譯的jdk版本:
如果是web項目,就需要打war包,那就需要這個插件:
${project.build.sourceEncoding}強制字符集編碼
platformwar包名字——platform.war
${project.build.directory}/platform
產(chǎn)生war前,用于存放構(gòu)建war包的目錄——target/platform。D?rH?4?
產(chǎn)生war前,用于存放構(gòu)建war包的目錄——target/platform。
使用maven工具鏈:
使用不同的JDK的最好方法是使用工具鏈方式。在建立一個項目,如編譯java源文件,生成Javadoc,運行單元測試、打包,這些插件中的每一個都需要一個JDK工具來對應(yīng)操作:Javac、JavaDoc、JaveNeR等。使用Maven工具鏈插件,您可以為所有相關(guān)的Maven插件配置1個默認JDK工具鏈也可以各自配置不同的jdk,用法略。
配置編譯插件:
除工具鏈方式之外,也可以在編譯過程中使用的特定JDK。這樣的配置對這個插件是特定的,不會影響其他插件。compilerVersion參數(shù)可以用來指定插件使用的編譯器版本,但是需要將fork設(shè)置為true才能工作,此為非常用配置不做詳細了解。
針對不同的編譯器設(shè)置source和target選項:
有時編譯某個項目時需要使用的jdk與當前maven所使用的版本不同。Javac可以使用source和target參數(shù)來接受這樣的命令。編譯器插件也可以被配置為在編譯期間提供這些選項。如剛才上述:官網(wǎng)也建議指定編譯的jdk版本
傳遞編譯參數(shù):
有時需要傳遞其他編譯器參數(shù),這些編譯器參數(shù)本身不是插件本身需要處理的,而是需要將編譯器參數(shù)傳遞給Javac編譯器,如下圖
二、POM簡介
所有的 POM 都繼承自一個父 POM(無論是否顯式定義了這個父 POM),它包含了一些可以被繼承的默認設(shè)置。Maven 使用 effective pom(Super pom 加上工程自己的配置)來執(zhí)行相關(guān),目的為了使開發(fā)者在 pom.xml中做盡可能少的配置,且在子配置中可以被方便的覆蓋:
比如不指定packing時,即默認打jar包時打開effective pom:
再看另一種舉例:
當指定packing為war,指定打war包時打開effective pom:
所以我們只需要指定packing打包類型,maven插件可以自動加載并繼承父pom相關(guān)配置。
如果父pom中的默認配置不符合現(xiàn)有項目要求,而在我們的pom中有沒有覆蓋,則會抱錯,如刪除pom中的maven-compiler-plugin,使其不覆蓋父pom中的maven-compiler-plugin,這樣就是使用的父pom中的配置:
上圖刪除了pom中的maven-compiler-plugin,再看下圖effecrive pom中的:
看到這樣就使用了默認父pom的maven-compiler-plugin2.3.2版本,此版本默認的jdk是1.5,maven編譯時報:
然后修改自己的pom中的maven-compiler-plugin覆蓋父pom中的maven-compiler-plugin,使用自定義覆蓋默認配置:
上圖pom中增加了maven-compiler-plugin,再看下圖effecrive pom中的:
則使用jdk1.7編譯成功了
常用插件:
maven的屬性值的占位符,類似EL,類似ant的屬性,比如${X},可用于pom文件任何賦值的位置。有以下分類:
env.X:操作系統(tǒng)環(huán)境變量,比如${env.PATH}
project.x:pom文件中的屬性,比如:1.0,引用方式:${project.version}
settings.xml文件中的屬性,比如:false,引用方式:${settings.offline}
Java System Properties:java.lang.System.getProperties()中的屬性,比如java.home,引用方式:${java.home}
自定義在pom文件中可以:c:/apps/cargo-installs定義屬性及屬性的值,而引用方式為:${installDir}
三、工作機制
Maven強大的一個重要的原因是它有一個十分完善的生命周期模型(lifecycle),它有三套相互獨立的生命周期,請注意這里說的是“三套”,請別將Maven的生命周期看成一個整體哦,三個生命周期是獨立線性執(zhí)行,分別是:
Clean Lifecycle 在進行真正的構(gòu)建之前進行一些清理工作。
Default Lifecycle 構(gòu)建的核心部分,編譯,測試,打包,部署等等。
Site Lifecycle 生成項目報告,站點,發(fā)布站點。
每個生命周期包含一些階段(phase),這些階段(phase)是有順序的,每個階段蘊含一個或多個目標(goal),并且后面的階段依賴于前面的階段,我們和Maven最直接的交互方式就是調(diào)用這些生命周期階段。較之于生命周期階段的前后依賴關(guān)系,三套生命周期本身是相互獨立的,用戶可以僅僅調(diào)用clean生命周期的某個階段,或者僅僅調(diào)用default生命周期的某個階段,而不會對其他生命周期產(chǎn)生任何影響。例如,當用戶調(diào)用clean生命周期的clean階段的時候,不會觸發(fā)default生命周期的任何階段。其中deault是最重要的生命周期,擁有validate 、compile 、test 、package、integration、verify、install、deploy等等階段。
看一下Maven的編譯階段,讓maven進行編譯代碼,使用的是聲明的方式來告知Maven如何做的??此埔粋€簡單的命令,但其實它后面執(zhí)行了一系列的工作。mvn compile如不指定compile階段的goal,所以complie階段所有g(shù)oal,compile和test compile都會執(zhí)行。
Maven是如何知道從哪里找到要編譯的源文件?并且Maven如何知道將編譯好的類文件放到哪里?這里就是由Mave基礎(chǔ)工作之一“通過配置進行約定”所解決的問題。一般情況下,源文件放在src/main/java路徑下,這種默認設(shè)置(雖然在上面的POM文件中并沒看到)是從父 POM繼承來的,即使最簡單的POM也知道源文件的默認位置:
當首次執(zhí)行compile命令或其它命令時,maven會下載所有插件和相關(guān)的文件,而之后再執(zhí)行同一個命令的時候會發(fā)現(xiàn)比第一次快很多,這就為什么首次執(zhí)行命令時候會比較慢的原因。
大家有沒有想過,如果maven自帶的插件滿足不了我們的需求時候,該怎么辦呢?其實不難辦,可以通過自己寫插件來實現(xiàn)。下面給大家講一下如何寫插件。
1、首先需要創(chuàng)建一個maven項目tinaproject,然后把pom里的packaging改成maven-plugin
然后把版本改為你自己使用的版本,一般現(xiàn)在都是用maven2
接著添加依賴
2、pom修改完了之后就開始創(chuàng)建mojo類了,maven插件里每一個goal所對應(yīng)的功能都是一個Mojo,比如說eclipse:clean和eclipse:eclipse就是兩個Mojo
寫完了一個最簡單的mojo類之后就來測試下能否正確運行,把mvn install吧它發(fā)布到本地maven倉庫,然后在pom里再增加一個plugin(就是我自己寫的這個)
最后再運行mvn compile 就能看到輸出了
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Maven2 的新特性
常用maven插件
Maven 那點事兒
maven自導(dǎo)遠程下載包,maven常用命令
maven詳解之坐標與依賴
maven學(xué)習(xí)筆記一
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服