当前位置: 首页 > news >正文

Maven 自定义 archetype

    最近在公司经常要写一些 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文件的作用是为了描述,根据此骨架生成的工程应该包含的文件,具体设置如下:

 
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="miuse-job-archetype">
    <fileSets>
        <fileSet filtered="true" encoding="UTF-8">
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.**</include>
            </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/**</include>
            </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
            <directory>src/test/java</directory>
            <includes>
                <include>**/*.**</include>
            </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
            <directory></directory>
            <includes>
                 <include>.**</include>
            </includes>
        </fileSet>
  </fileSets>
</archetype-descriptor>

二、主要遇到的问题有

1. 为了能够规范工程各个模块,需要在新工程中包含部分空包(empty package)

   需要在archetype工程根目录下面的pom.xml (archetype/pom.xml)的文件中,通过增加maven-resource-plugin,并且设置<includeEmptyDirs>true</includeEmptyDirs>将空文件夹打包进工程中。

 
<build>
    <plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.3</version>
          <configuration>
            <includeEmptyDirs>true</includeEmptyDirs>
          </configuration>
      </plugin>
    </plugins>
  </build>

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. https://maven.apache.org/guides/mini/guide-creating-archetypes.html

转载于:https://www.cnblogs.com/felixpan/p/5910598.html

相关文章:

  • 谈谈一些有趣的CSS题目(六)-- 全兼容的多列均匀布局问题
  • 7.12 Java-based container configuration (基于java的容器配置)
  • 从根开始的DNS服务器架构,让整个互联网掌控于你的手中
  • 设计模式(五)简单工厂模式+工厂方法模式
  • CentOS 6.5升级Python和安装IPython(亲测可用)
  • Python 学习笔记 - 面向对象(封装,继承和多态)
  • 那些年我们一起追逐过的安全工具
  • 舞伴问题
  • Linux之查看文件大小和数目
  • Tomcat7优化配置
  • java对xml节点属性的增删改查
  • sublime text 3配置c/c++编译环境
  • Html5编辑工具
  • LAMP编译部署
  • centos7配置固定ip
  • 【笔记】你不知道的JS读书笔记——Promise
  • css属性的继承、初识值、计算值、当前值、应用值
  • Java,console输出实时的转向GUI textbox
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java多态
  • js中forEach回调同异步问题
  • Laravel Mix运行时关于es2015报错解决方案
  • Octave 入门
  • storm drpc实例
  • ubuntu 下nginx安装 并支持https协议
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 设计模式(12)迭代器模式(讲解+应用)
  • 算法-插入排序
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • - 转 Ext2.0 form使用实例
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (4)Elastix图像配准:3D图像
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (算法)N皇后问题
  • (转)原始图像数据和PDF中的图像数据
  • *** 2003
  • ***利用Ms05002溢出找“肉鸡
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core 中插件式开发实现
  • .net mvc 获取url中controller和action
  • .net对接阿里云CSB服务
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET下的多线程编程—1-线程机制概述
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • [bzoj 3534][Sdoi2014] 重建
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [C++]unordered系列关联式容器