大家好,
在觀看Justin撰寫的有關Spring和GWT的非常有趣的文章時,我認為展示如何構建自己的自定義Maven原型非常有用。我們將展示的原型基于Justin的上一個項目,并包括各種技術,例如Spring , GWT , AspectJ , HornetQ和Infinispan 。
聊夠了,現在讓我們動手吧。
準備原型。
首先,您必須有一個用于構建原型的模板項目。在我們的演示文稿中,您將在此處找到Justin項目。
將目錄更改為項目的根目錄,然后運行以下命令。
mvn archetype:create-from-project
命令完成后,您將在以下位置找到一個新項目,該項目在$ {project_home} / target / generated-sources / archetype位置生成。它是一個完整的Maven原型項目,您可以根據自己的需要進行自定義。
- 在文件夾src / main / resources / META-INF / maven中,您可以找到archetype-metadata.xml,它是原型的描述符。
- 在文件夾src / main / resources / archetype-resources中是將要生成的模板項目。
定制原型。
Maven原型使用apache速度來生成其代碼。 您可以通過在文件頂部設置以下常量來訪問文件中的速度變量:
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
然后,您可以使用$ {artifactId}語法訪問Maven屬性(例如artifactId ) 。還可以使用以下語法__artifactId__來訪問參數值。
每個原型都具有以下基本參數:
- groupId
- artifactId
- 版
- 包
您還可以使用以下語法在archetype-metadata.xml中設置任意數量的變量:
default_value
請注意,每次添加變量時,都應編輯src / test / resources / projects / basic / archetype.properties并添加參數。
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=basic
custom_variable=default_value
在我們的示例中,我們執行了以下更改:
在src / main / resources / META-INF / maven / archetype-metadata.xml中
<requiredProperties><requiredProperty key="db"><defaultValue>derby</defaultValue></requiredProperty><requiredProperty key="dburl"><defaultValue>javacodegeeks</defaultValue></requiredProperty> <requiredProperty key="dbusername"><defaultValue>***</defaultValue></requiredProperty><requiredProperty key="dbpassword"><defaultValue>***</defaultValue></requiredProperty><requiredProperty key="cache"><defaultValue>y</defaultValue></requiredProperty>
</requiredProperties>
在src / test / resources / projects / basic / archetype.properties
db=derby
dburl=javacodegeeks
dbusername=test
dbpassword=test
cache=n
在src / main / resources / archetype-resources / pom.xml中
#if( $db == "derby" )<dependency><groupId>org.apache.derby</groupId><artifactId>derby</artifactId><version>10.6.1.0</version></dependency>#elseif( $db == "mysql" )<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.13</version></dependency>#else <dependency><groupId>org.apache.derby</groupId><artifactId>derby</artifactId><version>10.6.1.0</version></dependency>
和
<plugin><artifactId>maven-resources-plugin</artifactId><version>2.4.3</version><executions><execution><id>copy-resources</id><!-- here the phase you need --><phase>validate</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>${basedir}/src/main/webapp/${package}.Application</outputDirectory><resources><resource><directory>${basedir}/src/main/resources/${artifactId}</directory><filtering>true</filtering></resource></resources></configuration></execution></executions></plugin>
在src / main / resources / archetype-resources / src / main / webapp / WEB-INF / applicationContext.xml中
#if($db == "mysql") <bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"init-method="init" destroy-method="close"><property name="uniqueResourceName" value="javacodegeeks" /><property name="xaDataSourceClassName"value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" /><property name="xaProperties"><props><prop key="URL">${dburl}</prop><prop key="user">${dbusername}</prop><prop key="password">${dbpassword}</prop></props></property><property name="maxPoolSize" value="50" /><property name="minPoolSize" value="20" /></bean>#else<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"init-method="init" destroy-method="close"><property name="uniqueResourceName" value="javacodegeeks" /><property name="xaDataSourceClassName" value="org.apache.derby.jdbc.EmbeddedXADataSource" /><property name="xaProperties"><props><prop key="databaseName">${dburl}</prop><prop key="createDatabase">create</prop></props></property><property name="maxPoolSize" value="50" /><property name="minPoolSize" value="20" /></bean> #end
在src / main / resources / archetype-resources / src / main / resources / META-INF / persistence.xml中
#if($cache == "y")<property name="hibernate.cache.use_second_level_cache" value="true"/><property name="hibernate.cache.use_query_cache" value="true"/><property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.InfinispanRegionFactory"/><!-- <property name="hibernate.cache.infinispan.entity.eviction.strategy" value= "LRU"/><property name="hibernate.cache.infinispan.entity.eviction.wake_up_interval" value= "2000"/><property name="hibernate.cache.infinispan.entity.eviction.max_entries" value= "5000"/><property name="hibernate.cache.infinispan.entity.expiration.lifespan" value= "60000"/><property name="hibernate.cache.infinispan.entity.expiration.max_idle" value= "30000"/>-->#else<property name="hibernate.cache.use_second_level_cache" value="false"/>^M<property name="hibernate.cache.use_query_cache" value="false"/>^M#end
將com / javacodegeeks / gwtspring / public文件夾重命名為__artifactId__。
安裝和運行原型
要安裝原型,請轉到原型的根文件夾,然后鍵入。
mvn install
這將創建?/ .m2 / archetype-catalog.xml文件,如果您是Eclipse的m2eclipse用戶,則可以將其導入到eclipse。
要運行原型,請運行以下命令。
mvn archetype:generate -DarchetypeCatalog=local -DarchetypeGroupId=com.javacodegeeks -DarchetypeArtifactId=gwtspring-archetype
或在eclispe中創建一個新的maven項目,然后從您從?/ .m2 / archetype-catalog.xml導入的本地目錄中選擇原型。
***請注意,原型可能是快照,您應選中“包括快照原型” 。
原型的源代碼在此處 。
希望您喜歡這篇文章,
最好的祝福,
拍
翻譯自: https://www.javacodegeeks.com/2010/07/building-your-own-gwt-spring-manen.html