最近在公司经常要写一些 storm-job 工程的骨架(archetype)非常相似,为了能够将大家的工程结构固定下来以及节约建工程的成本,所以给组内自定义了maven-archetype,中途遇到了一些坑。
一、archetype工程
这里记录一下.首先archetype本身就是一个Maven工程,所以需要按照Maven工程的基本结构构建工程。如图-1所示
archetype|-- pom.xml`-- src `-- main `-- resources |-- META-INF | `-- maven | `--archetype-metadata.xml `-- archetype-resources |-- pom.xml `-- src |-- main | `-- java | `-- App.java `-- test `-- java `-- AppTest.java
图-1 archetype工程结构
其中 archetype-metadata.xml文件的作用是为了描述,根据此骨架生成的工程应该包含的文件,具体设置如下:
src/main/java **/*.** src/main/resources **/*.xml **/** src/test/java **/*.** .**
二、主要遇到的问题有
1. 为了能够规范工程各个模块,需要在新工程中包含部分空包(empty package)?
需要在archetype工程根目录下面的pom.xml (archetype/pom.xml)的文件中,通过增加maven-resource-plugin,并且设置<includeEmptyDirs>true</includeEmptyDirs>将空文件夹打包进工程中。
org.apache.maven.plugins maven-resources-plugin 2.3 true
2. 怎么能够在新建工程中生成 groupID的结构,比如:gourpId: com.company.group.test,应该生成 com/company/group/test 的文件结构,并且在目录里面的 java文件的 package com.company.group.test;
archetype
|-- pom.xml`-- src `-- main `-- resources |-- META-INF | `-- maven | `--archetype-metadata.xml `-- archetype-resources |-- pom.xml `-- src |-- main | `-- java | `—__packageInPathFormat__(groupId)
| `—__artifactId__ (artifactId)
| `— 包名 `-- test `-- java `-- AppTest.java
其中_ _packageInPathFormat_ _ 为双下划线,表示gruopId。
3. 包中java 文件的 package 能够根据groupId生成?
#set( $symbol_pound = '#' )#set( $symbol_dollar = '$' )#set( $symbol_escape = '\' )package ${ package}.${artifactId}.app;public class App{ public static void main(String[] args) { System.out.println("Hello Muise Job"); } }
最后只要配置maven-archetype 发布地址,mvn deploy将响应的工程发布即可。
参考文献:
1.