日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

maven教程3_maven-compiler-plugin

 一本正經(jīng)地胡鬧 2019-12-08

                                                                                             原創(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版本目前默認的設置為1.5,默認用此版本,而不是根據(jù)你項目中指定的jdk版本編譯。如果你想改變這些默認設置,你應該設置編譯源和目標中java編譯器的目標,通過設置Java源代碼兼容的JVM版本,標明Java源代碼開發(fā)過程中使用的Java版本,通過設置編譯后的類庫擬運行的JVM版本,給出編譯后的類庫將要運行的Java環(huán)境(一般都會設置,因為很少有項目再用1.7以下的版本了):

 同時,命令mvn的運行需要依賴JDK,Compiler插件默認使用當前運行mvn命令的JDK去編譯Java源代碼。如果想使用其他版本的JDK(比如本地java環(huán)境的,而非maven自帶的)編譯Java源代碼,則需要設置如下(重點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前,用于存放構建war包的目錄——target/platform。D?rH?4?

產(chǎn)生war前,用于存放構建war包的目錄——target/platform。 

使用maven工具鏈:

使用不同的JDK的最好方法是使用工具鏈方式。在建立一個項目,如編譯java源文件,生成Javadoc,運行單元測試、打包,這些插件中的每一個都需要一個JDK工具來對應操作:Javac、JavaDoc、JaveNeR等。使用Maven工具鏈插件,您可以為所有相關的Maven插件配置1個默認JDK工具鏈也可以各自配置不同的jdk,用法略。

配置編譯插件:

除工具鏈方式之外,也可以在編譯過程中使用的特定JDK。這樣的配置對這個插件是特定的,不會影響其他插件。compilerVersion參數(shù)可以用來指定插件使用的編譯器版本,但是需要將fork設置為true才能工作,此為非常用配置不做詳細了解。

針對不同的編譯器設置source和target選項:

有時編譯某個項目時需要使用的jdk與當前maven所使用的版本不同。Javac可以使用source和target參數(shù)來接受這樣的命令。編譯器插件也可以被配置為在編譯期間提供這些選項。如剛才上述:官網(wǎng)也建議指定編譯的jdk版本

傳遞編譯參數(shù):

有時需要傳遞其他編譯器參數(shù),這些編譯器參數(shù)本身不是插件本身需要處理的,而是需要將編譯器參數(shù)傳遞給Javac編譯器,如下圖

二、POM簡介

所有的 POM 都繼承自一個父 POM(無論是否顯式定義了這個父 POM),它包含了一些可以被繼承的默認設置。Maven 使用 effective pom(Super pom 加上工程自己的配置)來執(zhí)行相關,目的為了使開發(fā)者在 pom.xml中做盡可能少的配置,且在子配置中可以被方便的覆蓋:

比如不指定packing時,即默認打jar包時打開effective pom:

再看另一種舉例:

當指定packing為war,指定打war包時打開effective pom:

所以我們只需要指定packing打包類型,maven插件可以自動加載并繼承父pom相關配置。

如果父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 在進行真正的構建之前進行一些清理工作。

Default Lifecycle 構建的核心部分,編譯,測試,打包,部署等等。

Site Lifecycle 生成項目報告,站點,發(fā)布站點。

        每個生命周期包含一些階段(phase),這些階段(phase)是有順序的,每個階段蘊含一個或多個目標(goal),并且后面的階段依賴于前面的階段,我們和Maven最直接的交互方式就是調(diào)用這些生命周期階段。較之于生命周期階段的前后依賴關系,三套生命周期本身是相互獨立的,用戶可以僅僅調(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階段所有goal,compile和test compile都會執(zhí)行。

        Maven是如何知道從哪里找到要編譯的源文件?并且Maven如何知道將編譯好的類文件放到哪里?這里就是由Mave基礎工作之一“通過配置進行約定”所解決的問題。一般情況下,源文件放在src/main/java路徑下,這種默認設置(雖然在上面的POM文件中并沒看到)是從父 POM繼承來的,即使最簡單的POM也知道源文件的默認位置:

當首次執(zhí)行compile命令或其它命令時,maven會下載所有插件和相關的文件,而之后再執(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所對應的功能都是一個Mojo,比如說eclipse:clean和eclipse:eclipse就是兩個Mojo 

寫完了一個最簡單的mojo類之后就來測試下能否正確運行,把mvn install吧它發(fā)布到本地maven倉庫,然后在pom里再增加一個plugin(就是我自己寫的這個) 

最后再運行mvn compile 就能看到輸出了

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多