- 浏览: 375083 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
真的全站唯一:
描述的能不能准确一点,我也以为bigDecimal性能比dou ...
【性能】Java BigDecimal和double性能比较 -
zhanggang807:
学习到了。。以后会考虑往这方面设计
【java规范】Java spi机制浅谈 -
Xiong506:
xiyuan1025 写道你这是在linux下吗,我在linu ...
[监控]Btrace监控简单笔记 -
Xiong506:
xiyuan1025 写道你这是在linux下吗,我在linu ...
[监控]Btrace监控简单笔记 -
Bll:
找不到实现类
【java规范】Java spi机制浅谈
【maven】多子模块maven模板工程archetype创建过程
最近项目里需要创建一个多模块(子工程)的模板项目,所以研究了一下maven的archetype plugin。
创建了一个包含多个子模块工程的项目模板。记录下过程。
一个模板工程任务就是创建一个或多个默认的工程,并为每个工程填充好默认的一些文件和配置。同时要抽象出生成的工程需要的一些属性,做到这些属性可动态配置。
mvn archetype:generate
servicearchetype 工程总体结构
模板工程主要分为两个部分:
1.模板工程定义资源元文件
这些元文件是生成工程的时候需要用到的。放在src/main/resources/archetype-resources里。这里面的文件是生成模板工程是需要用到的元文件,一般也就是生成项目是默认填充的一些文件。
src/main/resources/archetype-resources里必须要有一个顶级pom文件(如果是单工程就是工程pom文件),同时子文件夹代表了模块定义。
这些文件可以写成velocity模板语法,在文件里使用一些变量,在生成文件的时候,可以选择通过velocity引擎渲染生成。
如以上例子里的src/main/resources/archetype-resources/common/pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>${groupId}</groupId> <artifactId>${appName}.${artifactId}</artifactId> <version>${version}</version> <name>${appName}.${artifactId}</name> <dependencies> </dependencies> </project>
可以看到里面使用到了groupId,appName,artifactId等变量,这些变量在生成项目文件的时候会通过vilocity引擎进行替换。至于这些变量定义在哪里,可以看下一部分工程描述文件。
可以根据自己项目的类型和需要,定义任意的资源元文件,如java,xml,MANIFEST.MF等等。
2.模板工程定义描述文件META-INF/maven/archetype-meatdata.xml
有了工程定义元文件还不够。还需要一个东西来描述需要生成工程的结构和文件组成等等,这里可以通过archetype工程定义描述符来定义。
该文件是具体的生成工程规则的描述符。关于工程定义描述文件可以参考maven的官方文档:archetype-descriptor
如下是我写的工程定义描述:
<?xml version="1.0" encoding="UTF-8"?> <archetype-descriptor name="servicearchetype"> <requiredProperties> <requiredProperty key="appName"> <defaultValue>helloworld</defaultValue> </requiredProperty> <requiredProperty key="groupId"> <defaultValue>com.alibaba.china.app</defaultValue> </requiredProperty> <requiredProperty key="artifactId"> <defaultValue>helloworld</defaultValue> </requiredProperty> <requiredProperty key="package"> <defaultValue>com.alibaba.china.app</defaultValue> </requiredProperty> </requiredProperties> <modules> <module id="service.common" dir="common" name="service.common"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.java</include> <include>**/*.txt</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/test/java</directory> <includes> <include>**/*.java</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="false"> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="false"> <directory>src/test/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> <module id="service.core" dir="core" name="service.core"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.java</include> <include>**/*.txt</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/test/java</directory> <includes> <include>**/*.java</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="false"> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="false"> <directory>src/test/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> <module id="service.dal" dir="dal" name="service.dal"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.java</include> <include>**/*.txt</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/test/java</directory> <includes> <include>**/*.java</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="false"> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="false"> <directory>src/test/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> <module id="service.deploy" dir="deploy" name="service.deploy"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="false"> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> <module id="service.refrence" dir="refrence" name="service.refrence"> <fileSets> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.java</include> <include>**/*.txt</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/test/java</directory> <includes> <include>**/*.java</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="false"> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8" packaged="false"> <directory>src/test/resources</directory> <includes> <include>**/*.*</include> </includes> </fileSet> <fileSet filtered="true" encoding="UTF-8"> <directory></directory> <includes> <include>pom.xml</include> </includes> </fileSet> </fileSets> </module> </modules> </archetype-descriptor>
工程描述定义是个xml文件,符的几个重要标签定义解释如下
1.属性变量定义
工程定义里需要用到的属性。
如
<requiredProperties> <requiredProperty key="appName"> <defaultValue>helloworld</defaultValue> </requiredProperty> <requiredProperty key="groupId"> <defaultValue>com.alibaba.china.app</defaultValue> </requiredProperty> <requiredProperty key="artifactId"> <defaultValue>helloworld</defaultValue> </requiredProperty> <requiredProperty key="package"> <defaultValue>com.alibaba.china.app</defaultValue> </requiredProperty> </requiredProperties>
这些属性可以在资源元文件里的任意一个文件里通过${var}来引用,所以的元文件最终都可以选择通过velocity引擎来执行替换后生成。
默认的属性有:groupId,artifactId,packeage,version等。如在元文件里定义pom文件可以用:
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<packaging>pom</packaging>
<version>${version}</version>
2.项目子模块定义
可选,在定义多工程时才需要。如:
< modules> < module id= "service.common" dir = "common" name= "service.common" > ....... < /module> < module id= "service.core" dir = "core" name= "service.core" > ....... < /module> </modules>
module有三个属性,解释如下:
id :相当于工程的artifactId.
dir :相当于工程源文件在archetype-resources里对应的directory.
name :模块的名字.
3.项目文件集定义
fileSets/fileSet* 文件集合定义
如
<fileSet filtered="true" encoding="UTF-8" packaged="true"> <directory>src/main/java</directory> <includes> <include>**/*.java</include> <include>**/*.txt</include> </includes> </fileSet>
以上代表将archetype-resources里的src/main/java目录及内容作为新工程的目录和内容。里面的每个文件生成都会使用velocity模板引擎渲染,以替换变量。同时当packaged=true是表示会在生成这些新文件的时候,前面加上默认的包。
些属性做到可配置的变量。
总结
通过以上两部分定义之后,执行命令mvn clean install就将archetype安装到本地仓库了。
再通过如下命令:
mvn archetype:generate -DarchetypeCatalog=local
选择你定义的工程archetype,同时通过交互输入需要的属性变量,就会默认生成好你定义的工程。
一下工程结构是我上面根据例子里定义的archetype生成的多子模块工程:
archtype定义工程源码见附件。
评论
要先通过执行命令mvn clean install 将例子里定义的archetype安装到本地仓库 之后在执行mvn archetype:generate -DarchetypeCatalog=local
是先执行了mvn clean install,看了下本地mvn仓库也有的,还是出不来选项,跟maven版本、velocity有关吗?我的maven版本是2.2.1
D:\Backup\project>mvn archetype:generate -DarchetypeCatalog=local [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'archetype'. [INFO] artifact org.apache.maven.plugins:maven-archetype-plugin: checking for updates from central [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Default Project [INFO] task-segment: [archetype:generate] (aggregator-style) [INFO] ------------------------------------------------------------------------ [INFO] Preparing archetype:generate [INFO] No goals needed for project - skipping [INFO] [archetype:generate {execution: default-cli}] [INFO] Generating project in Interactive mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1. 0) Choose archetype: Your filter doesn't match any archetype (hint: enter to return to initial list) Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): :
要先通过执行命令mvn clean install 将例子里定义的archetype安装到本地仓库 之后在执行mvn archetype:generate -DarchetypeCatalog=local
D:\Backup\project>mvn archetype:generate -DarchetypeCatalog=local [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'archetype'. [INFO] artifact org.apache.maven.plugins:maven-archetype-plugin: checking for updates from central [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Default Project [INFO] task-segment: [archetype:generate] (aggregator-style) [INFO] ------------------------------------------------------------------------ [INFO] Preparing archetype:generate [INFO] No goals needed for project - skipping [INFO] [archetype:generate {execution: default-cli}] [INFO] Generating project in Interactive mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1. 0) Choose archetype: Your filter doesn't match any archetype (hint: enter to return to initial list) Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): :
发表评论
-
Xml ResourceBundle简单实现
2012-04-17 21:45 4364ResourceBundle主要是用于和本地语言环境相关的一些 ... -
【vim】我的vim常用命令总结
2012-03-18 09:44 2861vim是linux下的开发利器,相信很多人都感受到了他的强大。 ... -
【java基础】如何设计java应用程序的平滑停止
2012-03-05 23:44 10924java应用程序退出的触发机制有: 1.自动结束:应用没有存 ... -
【java并发】juc Executor框架详解
2012-02-26 13:55 12374Executor 框架是 juc 里提供的线程池的实现。 ... -
【java并发】juc高级锁机制探讨
2012-02-23 00:52 8510最近在看一些j ... -
【java并发】基于JUC CAS原理,自己实现简单独占锁
2012-02-14 13:47 7766synchronized的基本原理回 ... -
[NoSQL]MongoDB初体验
2012-01-05 16:06 3926因为未来业务发展的一 ... -
【JVM】HotSpot JVM内存管理和GC策略总结
2011-12-13 22:05 15878JVM的相关知识是学习java ... -
【工具】svn几个容易忘记属性设置命令备忘
2011-11-08 13:32 296搭建项目,添加工程经常把svn的几个属性设置命令忘记了,老是要 ... -
32位机器下的一个java.lang.OutOfMemoryError错误分析
2011-10-17 11:19 2546昨天在本人windows机器( ... -
[监控]Btrace监控简单笔记
2011-09-09 10:57 4903前阵子看了公司网站的一个cache 命中率统计的btrace监 ... -
DBCP数据源配置项记录
2011-09-01 20:22 2934网站最近发生了数据库连接爆掉的问题。排查了下各个应用存在 ... -
【性能】Java BigDecimal和double性能比较
2011-08-28 20:06 14109我们知道 java 里面有个 BigDecimal ... -
【Spring】IOC容器并发条件下,可能发生死锁
2011-08-28 17:07 68331.背景 上周在生产环境应用启 ... -
JDK7 AIO 初体验
2011-08-17 19:20 2534JDK7 AIO初体验 JDK7已经releas ... -
如果要用java实现算法,一定慎用递归
2011-04-06 20:41 12823现象 : 递归是我们很经典的一种算法实现,可以很好的 ... -
java日志,需要知道的几件事(commons-logging,log4j,slf4j,logback)
2011-02-28 17:12 46237java日志,需要知道的几件事 如果对于comm ... -
JVM问题诊断常用命令:jinfo,jmap,jstack
2010-08-17 17:55 123951.jinfo 描述:输出给定 java ... -
java 浮点数为什么精度会丢失
2010-07-15 22:30 4838由于对float或double 的使用不当,可能会出现精度 ... -
一个枚举类的方法设计
2010-06-21 15:28 1647public enum ActionType { A ...
相关推荐
【Maven】〖项目模板文件〗archetype-catalog.xml 我寻见一片海 碧蓝且耀着光 大片船只航行其上 都向着远方 Shared by Foriver_江河 © 1997-8023 江河 All Rights Reserved.
使用Maven构建多模块项目
maven多模块项目,使用eclipse开发工具创建,有意可下载,没有解压密码
基于maven的分模块的web工程,可以去看https://blog.csdn.net/dmw412724/article/details/80001126这个教程
NULL 博文链接:https://yansxjl.iteye.com/blog/2333900
这是一个maven分模块的小demo,希望对大家有所帮助。如果有什么问题欢迎加关注私信。
官网链接地址:http://repo1.maven.org/maven2/archetype-catalog.xml 百度云链接:https://pan.baidu.com/s/1dF8Qa9V 密码:37me
所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml。它们之间通过继承和聚合(也称作多模块,multi-module)相互关联。 提供了一个简单的Maven多模块实例
2021-10-28官网下载archetype-catalog.xml。(maven项目快速搭建,缺少这个文件时,提示maven-archetype-webapp could not resolve archetpye)
Maven多模块项目编译速度慢,下面我们来学习下优化的方法。 mvn clean package -T 4C -Dmaven.test.skip=true -Dmaven.compile.fork=true -T 4C 代表本机4个CPU内核都参与编译工程, -Dmaven.test.skip=true 代表...
基于SpringBoot+Maven多模块工程利用proguard组件实现代码混淆的代码demo,代码清晰完整,导入idea或eclipse即可运行。 使用 proguard 混淆代码只能增加阅读和理解的难度, 并不能百分百保证代码安全。常用的应用...
maven多模块整合,freemarker模板技术,redis缓存技术
maven多模块项目使用jetty,详细看http://blog.csdn.net/xiejx618/article/details/49936541
2019-11-30 最新archetype-catalog.xml文件,解决Archetype not found in any catalog,解决No archetype found in remote catalog。 解决maven新建项目慢, 具体方法请下载,见详细说明 1.maven快速新建项目解决...
maven多模块打包的pom文件,里面包含多个模块的pom文件,没有代码
通过maven工具搭建项目模块化,包含父工程和子工程
maven 模块化项目demo,使用maven 开发模块化程序demo源码
1.用于maven 分模块创建项目 2.在下载包的目录执行:mvn install:install-file -DgroupId=org.apache.maven.archetypes -DartifactId=maven-archetype-webapp -Dversion=1.0 -Dpackaging=jar -Dfile=maven-archetype...
详细介绍IDEA从远程仓库SVN拉去MAVEN项目.多模块的项目