maven編譯用什麼插件
⑴ maven中插件plugin和依賴dependency的區別
插件是一種工具,例如compile插件是用來編譯代碼的工具,mybatis插件是用來自動生成資料庫和mapper的工具。而依賴則是項目工程在編譯過程中需要依賴的二方及三方包。在你的工程中可以不需要mybatis插件,自己去實現sql的crud,但如果工程里需要三房包,則必須要用dependency引入。
⑵ 如何用maven把依賴的jar包編譯到最終生成的jar包中
有兩種方法: 方法一:直接在當前mole中的pom.xml文件中添加你需要依賴的mole的坐標。這種方式簡單,用的也比較多。 例如: org.test.autodeployorg.test.autodeploy0.0.1-SNAPSHOT方法二:這要中間使用一個nexus倉庫,首先把你的工程使用ma...
⑶ maven 里怎麼自動編譯 groovy
1. 首先確定使用 Groovy 的版本
<properties>
<groovy.version>2.4.3</groovy.version>
</properties>
2. 配置項目依賴 Groovy 包和模塊,這個看實際情況增加相關的依賴
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>${groovy.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-json</artifactId>
<version>${groovy.version}</version>
</dependency>
...
3. 關鍵的步驟是使用 gmavenplus 插件,綁定 maven 的編譯和執行周期
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-ant</artifactId>
<version>${groovy.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>addSources</goal>
<goal>addStubSources</goal>
<goal>compile</goal>
<goal>execute</goal>
</goals>
</execution>
</executions>
</plugin>
⑷ 如何在myeclipse中安裝maven插件
Maven和Ant的區別一:
1.ant腳本是可以直接運行在maven中的。maven和ant最大的差別就是在於maven的編譯以及所有的腳本都有一個基礎,就是POM(project
object model)。這個模型定義了項目的方方面面,然後各式各樣的腳本在這個模型上工作,而ant完全是自己定義,顯然maven更勝一籌。
2.maven對所依賴的包有明確的定義,如使用那個包,版本是多少,一目瞭然。而ant則通常是簡單的inclde
所有的jar。導致的最終結果就是,你根本無法確定JBoss中的lib下的common-logging
是哪個版本的,唯一的方法就是打開 META-INF
目錄下MANIFEST.MF。
3.maven是基於中央倉庫的編譯,即把編譯所需要的資源放在一個中央倉庫里,如
jar,tld,pom,等。當編譯的時候,maven會自動在倉庫中找到相應的包,如果本地倉庫沒有,則從設定好的遠程倉庫中下載到本地。這一切都是自
動的,而ant需要自己定義了。這個好處導致的結果就是,用maven編譯的項目在發布的時候只需要發布源碼,小得很,而反之,ant的發布則要把所有的
包一起發布,顯然maven又勝了一籌。
4.maven有大量的重用腳本可以利用,如生成網站,生成javadoc,sourcecode
reference,等。而ant都需要自己去寫。
5.maven目前不足的地方就是沒有象ant那樣成熟的GUI界面,不過mavengui正在努力中。目前使用maven最好的方法還是命令行,又快又方便
Maven的優勢:
•協同開發的基本規范,為大家提供方便的協作的模式,能增加代碼的復用,提高生產率。
•提供方便,規范化的打包方法,是公司完成自動構建系統的核心部分,能幫助提高敏捷開發的效率(敏捷開發提倡盡早集成)。
•減少冗餘,減少出錯的可能。
•中心資源庫管理,能減低源碼庫的大小,中心資源庫可以統一定期備份。
•目錄結構規范,讓開發者從一個maven項目過度到另一maven項目很容易。
•大量的開源項目使用了maven。
Maven常用命令:
•mvn archetype:generate :創建
Maven 項目
•mvn
compile :編譯源代碼
•mvn
test-compile :編譯測試代碼
•mvn
test : 運行應用程序中的單元測試
•mvn
site : 生成項目相關信息的網站
•mvn
clean :清除目標目錄中的生成結果
•mvn
package : 依據項目生成 jar 文件
•mvn
install :在本地 Repository 中安裝
jar
•mvn
deploy:將jar包發布到遠程倉庫
•mvn eclipse:eclipse :生成
Eclipse 項目文件
Maven的安裝配置:
在安裝maven之前,先確保已經安裝JDK1.7及以上版本,並且配置好環境變數。
下載maven3,最新版本是Maven3.2.1
,下載地址:http://maven.apache.org/download.html
下載apache-maven-3.2.1-bin.zip文件後,並解壓到 D:\maven\apache-maven-3.2.1
配置maven3的環境變數:先配置M2_HOME的環境變數,新建一個系統變數:M2_HOME
, 路徑是:D:\maven\apache-maven-3.2.1,如圖所示:
再配置path環境變數,在path值的末尾添加"%M2_HOME%\bin",如下圖所示;
點擊確定之後,打開cmd窗口:輸入
mvn -version,出現如下內容表示安裝成功。
Maven添加本地倉庫:
打
開本地存放maven目錄
例如:D:\maven\apache-maven-3.2.1,打開conf文件夾下的settings.xml文件,找到第53行,把注釋去掉,修改
成:<localRepository>E:/mvnRespo</localRepository>
eclipse中的設置:
為Eclipse安裝Maven插件(默認已有,無需安裝)為Eclipse配置MAVEN
從Eclipse的菜單欄點擊Windows
-> Preferences -> Maven ->
Installations,將之前解壓的maven添加進來,如圖所示
點擊User
Settings 使用我們自己的Maven配置,如圖所示
http://jingyan..com/article/4f7d5712aa9c631a201927ea.html
⑸ 如何編寫一個maven插件
基礎
當maven內置的功能不能滿足需求的時候怎麼辦,那就只能給它寫插件了。 (話說回來,給maven擴展只能寫一個很完整的插件,而不能是一個簡單的script,真的是太笨重了)
網路上很多maven的文章,但基本很少談及如何給它寫插件,即使你搜索maven plugin,也只是給你返回一堆如何使用maven插件的文章。希望這邊文章能給一些maven使用者帶來幫助。
我在這里先假設你已經懂得使用maven,我不會貼出完整的pom.xml文件
首先,你需要創建一個maven項目,插件是一種特殊的maven項目 然後修改pom.xml,將packaging改為maven-plugin
<packaging>maven-plugin</packaging>通過properties定義maven的版本
<properties><maven.version>2.2.1</maven.version></properties>maven3已經出了很久,並且兼容maven2,因此我們團隊內部都是統一使用maven3,但是我這里編寫插件使用的是maven2,可以同時在maven2和maven3下使用,不過其實這個原因並不重要,真正的原因是因為maven3的代碼實在太爛了,最初的時候我用maven3的api lib來寫,發現裡面很多代碼根本沒有注釋,而且很多代碼已經廢棄,但是並沒有明確說明究竟用什麼方法代替。最後我使用了maven2中被maven3廢棄的api來完成我的功能,跑的挺好的,就是有時可能會有一些使用准備廢棄的api的提醒而已。
接著添加依賴
<dependencies><dependency> <groupid>org.apache.maven</groupid> <artifactid>maven-plugin-api</artifactid> <version>${maven.version}</version></dependency><dependency> <groupid>org.apache.maven</groupid> <artifactid>maven-core</artifactid> <version>${maven.version}</version></dependency></dependencies>然後開始創建Mojo類,maven插件裡面每一個具體的功能都是一個Mojo 比如說eclipse:clean和eclipse:eclipse就是兩個Mojo
/*** @goal helloWorld*/public class HelloWorldMojo extends AbstractMojo { public void execute() throws MojoExecutionException { getLog().info("Hello, world!"); }}首先繼承AbstractMojo,並且實現execute()方法,這個就是每次調用進入的地方 然後需要在類的Javadoc上定義,這是一個annotation出來之前常用的定義方法(或許未來maven會將它改成annotation,那就能提供編譯校驗和IDE校驗)。我們必須定義@goal,代表運行目標,簡單來說就是eclipse:clean中的clean Mojo寫在哪個package底下都是可以的
這樣,我們就完成了一個簡單的maven plugin,然後我們需要一個簡單的測試來確定他正確運行 先通過maven install將它安裝到本地倉庫
然後打開任意maven的項目(比如說我們原來已經在用maven的項目),在pom.xml增加一個plugin
<build> <plugins> <plugin> <groupid>xxx</groupid> <artifactid>xxx</artifactid> <version>xxx</version> <executions> <execution> <phase>compile</phase> <goals> <goal>helloWorld</goal> </goals> </execution> </executions> </plugin> </plugins></build>需要留意的是phase部分,我們將這個plugin綁定到compile這個周期 然後我們運行mvn compile,就能成功看見Hello, world!輸出 (當然你也可以直接通過命令行運行,需要帶上完整的groupId和artifactId才能調用)
注入
Mojo是一個很簡單的Java Bean模式的類,你會發現Mojo所繼承的AbstractMojo裡面之後非常少的方法。那我們需要在Mojo.execute裡面獲取當前運行中的上下文如何處理呢?答案是注入,就是跟spring ioc差不多的注入方式。
常用的注入主要有兩種,第一種是xml配置中的額外設置 比如說我們有這么一個plugin的配置
<plugin><artifactid>maven-eclipse-plugin</artifactid><configuration><downloadsources>true</downloadsources></configuration></plugin>所有寫在configuration裡面的屬性都可以注入到Mojo中,比如說以下代碼
/** * @parameter */private boolean downloadSources;就可以通過downloadSources變數獲得配置中的值 值得注意的是,這里是不用生成完整的JavaBean模式的get/set的,並且private是有效的
javadoc裡面還可以加入其他屬性,比如說
/** * @parameter default-value="true" * @readonly */private boolean downloadSources;就是默認為true,並且不能通過配置修改(當然我們這里肯定不會有這樣的需求) 更多的javadoc可以參看官方文檔中的說明
第二種注入的數據就是上下文,跟HttpServlet.getServletContext這種寫法不一樣,如果我們需要Mojo運行期的上下文,也是通過注入獲得的
/** * @parameter expression="${project}" * @readonly */private MavenProject project;/** * @component * @readonly */private ArtifactFactory artifactFactory;例如這里我們就能獲得ArtifactFactory和MavenProject 需要注意的是這里可能有兩種方法,第一種跟xml配置獲得的方法差不多,通過expression指定名字 實際上,你在xml裡面,也可以通過${project}獲得相應的東西進行一些簡單的操作(當然xml裡面只能文本描述,這里是一個類)
另外一種就是使用@component這個標注,可以獲得一些基本的組件實例。
測試
寫完一個插件之後,我們就需要對他進行測試 如果我們用人工測試的話,將會非常麻煩,因為maven插件本身的發布流程就非常復雜 你需要編譯打包你的maven插件,然後安裝到本地庫(或遠程私庫中),然後寫一個sample project,再運行,看一下是否正確 當然你也可以用單元測試來解決一些問題,但是單元測試比較難保證插件最終正確,而且maven插件很經常是跟文件打交道
這里我們就需要對maven插件進行自動化的集成測試 maven的生命周期是包含集成測試的,默認是沒有綁定任何功能。不過如果你google一下,會找到一些maven進行集成測試的例子,大致就是啟動jetty,然後通過http訪問驗證,再關閉jetty
我們這里使用的是maven-invoker-plugin,它就是用於maven插件的集成測試
先在pom.xml中加入
<build><plugins><plugin><artifactid>maven-invoker-plugin</artifactid><configuration><cloneprojectsto>${project.build.directory}/it</cloneprojectsto></configuration><executions><execution><id>integration-test</id><goals><goal>install</goal><goal>run</goal></goals></execution></executions></plugin></plugins></build>cloneProjectsTo是先將測試案例拷貝出來再運行 execution段的設定是把maven-invoker-plugin的兩個goal綁定到integration-test上 integration-test這個生命周期會在mvn install之前調用
集成測試的內容放在 src/it 目錄下,每新建一個目錄代表一個獨立的測試,裡面放一個完整的maven項目,當然你在這個項目裡面需要引入自己編寫的maven插件並且運行 另外還需要一個postbuild.groovy文件,放在測試案例的根目錄,這個腳本的用處是檢查運行後的maven項目是否達到自己要的效果。很明顯,看名字就知道用groovy來寫,一般我們會檢查一下,是否產生了某某文件等等來判定,如果不正確的話拋出異常
然後我們在maven插件目錄運行mvn integration-test就能進行集成測試了
⑹ maven-compiler-plugin source和target的區別
maven-compile-plugin 這個插件就如同名字所顯示的這樣,用來編譯源代碼的。 最開始碰到這個插件是在於有的時候我們下載了一些工程需要編譯的時候,比如我們輸入命令:mvn install , 但是系統編譯的時候報錯了,錯誤的信息如下: [ERROR] Faile
⑺ eclipe maven 使用的編譯器是哪個
在Eclipse中新建了一個Maven工程, 然後更改JDK版本為1.6, 結果每次使用Maven > Update project的時候JDK版本都恢復成1.5。 一、原因分析: Maven官方文檔有如下描述: 編譯器插件用來編譯項目的源文件.從3.0版本開始, 用來編譯Java源文件的默認
⑻ 用maven編譯項目時出現如下問題
在/etc/profile配置java的環境變數: 你的mvn 項目是用哪個版本的jdk.,就要配置那個版本的jdk。
強制保存文件命令:w !sudo tee %
此時在進入項目執行:$ git pull origin master
繼續mvn clean install
⑼ maven pom.xml引入build-helper-maven-plugin插件有什麼作用
AndroidMavenPlugin——這個是Maven的插件,目的是能在使用mvnpackage時讓maven構建出一個能在Android上使用的目標文件。工具的介紹完畢,下面看看如何將Maven整合進一個Android工程:首先看看對於已經存在的Android工程:安裝好如上的插件,在Android的工程上點右鍵,彈出菜單Configure->ConverttoMavenproject配置好項目信息後會生成pom.xml以及工程上的圖標已經多出一個小M字更改project的packaging類型為apk[html]viewplain4.0.0org.cst.ming.android.samplesample0.0.1-SNAPSHOTapk在pom內聲明一個build的插件,在maven構建項目的時候就會在target內生成一個apk的文件[html]viewplain注意,這里指定了插件的版本,這個是maven官方提供的建議,需要在構建插件中指定插件版本;還有一點就是必須指定sdk.platform及sdk.path屬性,不然會因為找不到sdk而無法build的com.jayway.maven.plugins.android.generation2android-maven-plugin3.0.0truetrue7${env.ANDROID_SDK_HOME}truetrue這時候可以在pom.xml內添加各種的依賴,並且執行mvncleanpackage即可構建出一個apk文件在target此時已經整合完畢,可以在IDE內通過ADT來啟動項目,亦可以通過在pom.xml內配置android-maven-plugin通過mvnandroid:deploy將項目部署到指定的設備(虛擬機)上,詳情可以查閱android-maven-plugin的官方文檔對於新建項目的:在新建項目的時候可以採用archetype(項目原型)的方式構建,在向導內選擇項目原型,分別有de.akquinet.android.archetypes:android-quickstart:1.0.6——用於快速構建一個android-maven項目de.akquinet.android.archetypes:android-with-test:1.0.6——用於構建一個帶有測試的android-maven項目de.akquinet.android.archetypes:android-release:1.0.6——用於構建一個可以發布的android-maven項目,其中包含了一個純maven的父項目及兩個子android-maven項目在項目創建之後,還有點需要修改的,由於android-maven-plugin原名為maven-android-plugin,因為某種關系在某個版本之後更名為android-maven-plugin,但在這個原型內還是使用舊的maven-android-plugin,所以需要使用新插件的必須手動修改plugin.artifactId及其plugin.version
⑽ maven compiler plugin3.1compile是什麼意思
maven-compile-plugin
這個插件就如同名字所顯示的這樣,用來編譯源代碼的。
最開始碰到這個插件是在於有的時候我們下載了一些工程需要編譯的時候,比如我們輸入命令:mvn install ,
但是系統編譯的時候報錯了,錯誤的信息如下:
[ERROR]Failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile(default-compile)onprojectspringJMS:Compilationfailure:Compilationfailure:
[ERROR]/home/frank/programcode/SpringJMSSample/src/main/java/huangbowen/net/jms/MessageSender.java:[6,1]error:annotationsarenotsupportedin-source1.3
[ERROR]
[ERROR](use-)
[ERROR]/home/frank/programcode/SpringJMSSample/src/main/java/net/EmbedBrokerApp.java:[5,7]error:-source1.3
[ERROR]->[Help1]
[ERROR]
[ERROR],re-runMavenwiththe-eswitch.
[ERROR]Re-runMavenusingthe-.
[ERROR]
[ERROR],:
[ERROR][Help1]http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
從錯誤顯示的信息我們就可以看出,這是因為編譯的時候是默認用的javac 1.3版本的,太老了不支持代碼里的特性。
為了修改這個問題,我們需要設置編譯器的版本。
解決這個問題的辦法也比較簡單,就是直接在後面的插件部分增加如下的插件,
比如如下部分,將編譯器的版本設定為1.7:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>