1. 程式人生 > >MAVEN ARCHETYPE搭建專案模板

MAVEN ARCHETYPE搭建專案模板

1):進入放入專案的資料夾

                                                              

1

2):使用命令mvn archetype:create-from-project建立需要的模板專案

                                                            

2

                                                           

3

3):建立成功資訊BUILD SUCCESS。建立的模板目錄在

D:\achetype\demo-ruleapp\target\generated-sources\archetype

                             

4

4):定製需要的模板

create-from-project 命令說明:

a).maven提供的基礎命令,使用這個命令建立模板會預設查詢最短的包名並使用${package} 。

b).假設這是我們模板檔案中的一段程式碼如:圖5。可以看出最小的包名是com.meyacom(因為第一個import有fw欄位),所以使用create-from-project命令最後得出的檔案應該是如:圖6(請注意#set等關鍵字)。

                                                             

                                                           

5

                                                            

6

c).當parentpom.xml檔案中的<artifactId>demo-ruleapp</artifactId>

的屬性值和專案子模組檔名一致時如:圖7,圖8。Maven命令自動會使用佔位符替換如:圖9。當使用模板的時候會用artifactId將佔位符替換

                                                       

7

                                                       

8

                                                   

9

變數替換的說明:

a).檔案路徑

xxx\target\generated-sources\archetype\src\main\resources\archetype-resources\__rootArtifactId__-web\src\main\resources

b).配置檔案使用佔位符:

開啟ruleapp-context.properties檔案會有如下類似的東東:

#set( $symbol_pound = '#' )

#set( $symbol_dollar = '$' )

#set( $symbol_escape = '\' )

log4j.location=src/main/resources/

oracle.jdbc.jdbcUrl=jdbc:oracle:thin:@localhost:1521:test

oracle.jdbc.user=chenxx

oracle.jdbc.password=root

oracle.jdbc.driver=oracle.jdbc.driver.OracleDriver

# CAS Configuration

cas.client.servlet=http://localhost:9881/ruleapp-ins-web/j_spring_cas_security_check

# SSO Enabled

cas.server.login=http://localhost:7777/login

cas.server.ticketvalidator=http://localhost:7777/

cas.server.logout=http://localhost:7777/logout

# SSO logout_to

cas.server.logout_to=http://localhost:9999/index.do

c).使用佔位符替換所需要的資料庫等資訊(可以根據需要,不必要全部替換):

#set( $symbol_pound = '#' )

#set( $symbol_dollar = '$' )

#set( $symbol_escape = '\' )

log4j.location=src/main/resources/

oracle.jdbc.jdbcUrl=${oracle-jdbc-jdbcUrl}

oracle.jdbc.user=${oracle-jdbc-user}

oracle.jdbc.password=${oracle-jdbc-password}

oracle.jdbc.driver=${oracle-jdbc-driver}

cas.client.servlet=${cas-client-servlet}

cas.server.login=${cas-server-login}

cas.server.ticketvalidator=${cas-server-ticketvalidator}

cas.server.logout=${cas-server-logout}

cas.server.logout_to=${cas-server-logout_to}

配置檔案說明:

a).配置檔案路徑如下:

xxxxx\target\generated-sources\archetype\src\main\resources\META-INF\maven\archetype-metadata.xml

b).部分配置檔案程式碼(標籤說明請檢視附錄):

                                                           

10

<requiredProperty key="oracle-jdbc-jdbcUrl">

               <defaultValue>jdbc:oracle:thin:@localhost:1521:test</defaultValue>

</requiredProperty>

Key為我們在ruleapp-context.properties檔案中使用的佔位符

defaultValue屬性為該佔位符預設的值

archetype.properties配置:

a).檔案路徑如下:Xxxx/target\generated-sources\archetype\src\test\resources\projects\basic/archetype.properties

b).檔案內容:

#Tue Aug 1620:25:01 CST 2016

package=it.pkg

version=0.1-SNAPSHOT

groupId=archetype.it

artifactId=basic

c).增加需要使用佔位符的變數(紅色字型為增加的變數)

#Tue Aug 1620:25:01 CST 2016

package=it.pkg

version=0.1-SNAPSHOT

groupId=archetype.it

artifactId=basic

jdbc-oracle-url=url

………..

注意:jdbc-oracle-urlarchetype-metadata.xml檔案中requiredProperties節點的 key屬性(如下圖),等於號後面的可以任意命名

最重要的說明:

  a).create-from-project並不是一個很智慧的命令,大多時候使用命令生成的模板都不能滿足需求。如下圖的分析

                                                                        

11

圖11為生成模板前的一個片段程式碼,注意紅框的地方。接下來,使用命令生成模板我們來看下實際的效果。圖12,13為parent模組的生成模板前後的程式碼對比

<version>1.1.0</version>其中的1.1.0預設使用了${version}佔位符。這看似沒有什麼問題。當我們找到圖11生成模板之後的程式碼片段如圖14所示。可以看出

生成的模板和我們需要的模板是有一定的差距的。正確的模板應該是如圖15所示

                                                                    

                                                                    

12

                                                                  

13

                                                                   

14

           

15

b).解決上述問題的兩種方法:1).每個檔案去檢查每個佔位符是否正確

2).手動的去替換每一個檔案,自己先寫好每個檔案需要使用佔位符的地方,然後覆蓋使用命令生成的使用佔位符的檔案。

上述過程需要細心和耐心,心情不好的時候請勿嘗試!!!!

c).當我們要生成的模板src/test/javasrc/main/java裡面沒有java檔案時,maven會自動把檔案去掉。結果就是我們使用模板生成的專案裡面會沒有src/test/javasrc/main/java這些目錄(當然我們可以可以自己新建這些source folder)。雖然在生成專案後不會報錯也不會影響專案執行。但是我們檢視build path——>source可以看出有如下錯誤。如圖16

                                                             

16

為了避免出現這種情況。建議在配置檔案中加入如下的fileset

<fileSet filtered="true"encoding="UTF-8">

<directory>src/test/java</directory>

<includes>

<include>**/*.java</include>

</includes>

</fileSet>

//main目錄下沒有java檔案

<fileSet filtered="true"encoding="UTF-8">

<directory>src/main/java</directory>

<includes>

<include>**/*.java</include>

</includes>

</fileSet>

遇到的問題及解決思路

1):解決“Dynamic Web Module 3.0 requires Java 1.6 ornewer.”錯誤

(自己的demo,非本專案在此先做記錄)

在專案的pom.xml<build></build>標籤中加入:

Xml程式碼

1.  <plugins>

2.  <plugin>

3.  <groupId>org.apache.maven.plugins</groupId>

4.  <artifactId>maven-compiler-plugin</artifactId>

5.  <version>2.3.2</version>

6.  <configuration>

7.  <source>1.6</source>

8.  <target>1.6</target>

9.  </configuration>

10. </plugin>

11. </plugins>

 2):出現如下錯誤。

 

1.檢視M2_HOME 的path路徑是否正確。

2.如果正確。恭喜你,可以換系統了。

3):使用模板新建專案,出現Could not saveencoding settings.錯誤。

1.檢視workspace編碼格式是否是utf-8

2.jsp格式是否是utf-8

3.確保.xml和.Properties的編碼格式為utf-8(.xml檔案右鍵--àproperties檢視編碼格式)

4. 新建MAVEN_OPTS環境變數,屬性值為 -Dfile.encoding=utf-8