`

【飞天奔月出品】maven create-from-project 之 multi-module project

阅读更多

背景:

 

经常要搭建新项目架构,以前都是copy paste 

很繁琐,久而久之,会磨灭人的心性

 

后来我自己写了template项目,使用批处理来创建新项目,以后有机会和大家分享下这个心得

但是自己感觉不高大上

 

后来看到了  Maven Archetype Plugin   http://maven.apache.org/archetype/maven-archetype-plugin/

非常不错

 

 

 

不过有些坑

 

这不,当我使用 Create an archetype from a multi-module project 的时候

 http://maven.apache.org/archetype/maven-archetype-plugin/examples/create-multi-module-project.html

 

我的项目是这样的目录

 

 

feilong-platform.
├─.settings
├─feilong-daemon
│  ├─.settings
│  └─src
│      ├─main
│      │  ├─java
│      │  └─resources
│      └─test
│          ├─java
│          └─resources
├─feilong-frontend
│  ├─.settings
│  └─src
│      ├─main
│      │  ├─java
│      │  └─resources
│      └─test
│          ├─java
│          └─resources
├─feilong-mobile
│  ├─.settings
│  └─src
│      ├─main
│      │  ├─java
│      │  └─resources
│      └─test
│          ├─java
│          └─resources
├-feilong-repo
│  ├─.settings
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─com
│      │  │      └─feilongarchetype
│      │  │          ├─dao
│      │  │          ├─manager
│      │  │          ├─model
│      │  │          ├─util
│      │  │          └─web
│      │  │              ├─controller
│      │  │              ├─filter
│      │  │              ├─interceptor
│      │  │              ├─servlet
│      │  │              └─view
│      │  └─resources
│      └─test
│          ├─java
│          └─resources
└─feilong-sitemanager
    ├─.settings
    └─src
        ├─main
        │  ├─java
        │  └─resources
        └─test
            ├─java
            └─resources

 

 

 

父项目的名字是 feilong-platform

下面有四个子modoule

 

 

	<modules>
		<module>feilong-repo</module>
		<module>feilong-frontend</module>
		<module>feilong-sitemanager</module>
		<module>feilong-daemon</module>
		<module>feilong-mobile</module>
	</modules>

 

 

运行 

 

 

mvn -DdefaultEncoding=utf-8 -Darchetype.filteredExtensions=java archetype:create-from-project

 

 

创建出来的骨架是这样的



 

按照官方文档说明, 里面的目录应该变成 可变参数   "__rootArtifactId__"

 

但是我试过无数遍,死活还是老样子

 

查遍了官方文档,无迹;

查阅了,stackoverflow,无果;

 

 

解决方案:

好吧,古人云:"源码面前,了无秘密~"

 

直接看 maven-archetype-plugin 源码

 

 

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-archetype-plugin</artifactId>
				<version>2.2</version>
			</plugin>
		</plugins>
	</build>

 

 

 

跟踪代码下来,发现 

 

org.apache.maven.archetype.creator.FilesetArchetypeCreator 495 line

 

 

        for ( Iterator<String> modules = pom.getModules().iterator(); modules.hasNext(); )
        {
            String subModuleId = modules.next();

            String subModuleIdDirectory = subModuleId;

            if ( subModuleId.indexOf( rootArtifactId ) >= 0 )
            {
                subModuleIdDirectory = StringUtils.replace( subModuleId, rootArtifactId, "__rootArtifactId__" );
            }

            createModulePoms( pomReversedProperties, rootArtifactId, packageName,
                              FileUtils.resolveFile( basedir, subModuleId ),
                              FileUtils.resolveFile( archetypeFilesDirectory, subModuleIdDirectory ), preserveCData,
                              keepParent );
        }

 

 

好嘛, 原来,子module 的名字不能随便取的,  需要有父module 的前缀

 

比如 父module rootArtifactId 叫 feilong-platform,那么 子module repo 需要叫 feilong-platform-repo 

不能叫 feilong-repo

 

发现了这个新大陆之后,很开心,重新修改项目结构

 

feilong-platform
├─.settings
├─feilong-platform-daemon
│  ├─.settings
│  ├─src
│  │  ├─main
│  │  │  ├─java
│  │  │  └─resources
│  │  └─test
│  │      ├─java
│  │      └─resources
│  └─target
│      ├─classes
│      └─test-classes
├─feilong-platform-frontend
│  ├─.settings
│  ├─src
│  │  ├─main
│  │  │  ├─java
│  │  │  └─resources
│  │  └─test
│  │      ├─java
│  │      └─resources
│  └─target
│      ├─classes
│      └─test-classes
├─feilong-platform-mobile
│  ├─.settings
│  ├─src
│  │  ├─main
│  │  │  ├─java
│  │  │  └─resources
│  │  └─test
│  │      ├─java
│  │      └─resources
│  └─target
│      ├─classes
│      └─test-classes
├─feilong-platform-repo
│  ├─.settings
│  ├─src
│  │  ├─main
│  │  │  ├─java
│  │  │  │  └─com
│  │  │  │      └─feilongarchetype
│  │  │  │          ├─dao
│  │  │  │          ├─manager
│  │  │  │          ├─model
│  │  │  │          ├─util
│  │  │  │          └─web
│  │  │  │              ├─controller
│  │  │  │              ├─filter
│  │  │  │              ├─interceptor
│  │  │  │              ├─servlet
│  │  │  │              └─view
│  │  │  └─resources
│  │  └─test
│  │      ├─java
│  │      └─resources
│  └─target
│      ├─classes
│      └─test-classes
└─feilong-platform-sitemanager
    ├─.settings
    ├─src
    │  ├─main
    │  │  ├─java
    │  │  └─resources
    │  └─test
    │      ├─java
    │      └─resources
    └─target
        ├─classes
        └─test-classes

 

再次执行 

mvn -DdefaultEncoding=utf-8 -Darchetype.filteredExtensions=java archetype:create-from-project

 

结果 

 



 

 

 

bingo,成功了 

 

 

参考:

 

http://stackoverflow.com/questions/12830002/maven-archetype-not-using-properties-to-create-module-names#12842422

  • 大小: 4.6 KB
  • 大小: 5.1 KB
分享到:
评论
2 楼 飞天奔月 2015-04-23  
heydaytoheyong 写道

雍雍 最近怎么样
1 楼 heydaytoheyong 2015-04-21  

相关推荐

    【飞天奔月出品】windows版nginx 快速操控神器(启动start,关闭stop,重启restart) 批处理

    标题中的“【飞天奔月出品】windows版nginx 快速操控神器(启动start,关闭stop,重启restart) 批处理”指的是一个专为Windows操作系统设计的Nginx管理工具,它通过批处理脚本实现了Nginx服务的便捷启动、停止和重启...

    HTML5小游戏【火贱兔奔月-425款经典优秀H5小游戏合集】游戏源码分享下载 - hjby.zip

    游戏源码分享下载 --- hjby.zipHTML5小游戏【火贱兔奔月--425款经典优秀H5小游戏合集】游戏源码分享下载 --- hjby.zipHTML5小游戏【火贱兔奔月--425款经典优秀H5小游戏合集】游戏源码分享下载 --- hjby.zipHTML5小...

    兔子奔月吃月饼游戏源码-HTML-代码

    这是一个关于Web前端开发的知识点详解,主要聚焦在HTML、CSS和JavaScript这三门核心技术上,以"兔子奔月吃月饼游戏源码"为实例进行解析。 首先,HTML(HyperText Markup Language)是构建网页的基础,它定义了网页...

    火箭兔奔月HTML5游戏源码

    在火箭兔奔月这个游戏源码中,我们可以期待看到以下关键技术和概念: 1. **Canvas绘图**:游戏的主要画面很可能是通过`canvas`元素进行绘制的,包括火箭兔的动画、月球背景和其他游戏元素。开发者会利用JavaScript...

    HTML5奔月游戏

    HTML5奔月游戏是一款完全基于HTML5技术开发的互动小游戏,玩家可以扮演一只兔子,目标是在游戏中尽可能地收集月饼并安全抵达月球。这款游戏的亮点在于其无需任何额外的插件或软件支持,只需浏览器就能运行,这得益于...

    Photoshop合成奔月女孩梦幻艺术照片效果.doc

    这篇文档介绍了如何使用Adobe Photoshop软件创作一张奔月女孩的梦幻艺术照片效果。以下是详细步骤: 1. **新建文件与导入素材**: - 首先创建一个新文件,大小与素材1相同,命名为"奔月女孩"。 - 然后打开素材1,...

    鲁迅《奔月》作品分析.pdf

    《奔月》是鲁迅先生的一篇短篇小说,收录于其《故事新编》之中,通过对传统神话的再创作,鲁迅以戏拟的手法揭示了深刻的社会与人性问题。这篇作品通过对后羿这一昔日英雄形象的塑造,反映出鲁迅对时代变迁下英雄命运...

    小游戏源码-火贱兔奔月.rar

    【标题】"小游戏源码-火贱兔奔月.rar" 提供的是一个小型游戏的源代码,名为"火贱兔奔月"。这类源码通常用于教学、学习或游戏开发者的参考,帮助开发者理解游戏的基本架构和编程逻辑。 【描述】"小游戏源码-火贱兔...

    奔月生物:2021年半年度报告.PDF

    奔月生物:2021年半年度报告.PDF

    H5游戏源码 奔月游戏.zip

    《H5游戏源码解析:奔月游戏》 在当今数字化时代,HTML5(简称H5)技术以其跨平台、轻量级、易部署的特点,成为制作网页游戏的热门选择。"奔月游戏"作为一款H5游戏,其源码为我们提供了一窥H5游戏开发的窗口。本文...

    长娥奔月模板下载TIF

    【长娥奔月模板下载TIF】是一个与网页设计相关的资源,主要提供了一种以"长娥奔月"为主题的网页模版。这个模版可能是为了庆祝中国传统节日,如中秋节,或者用于讲述中国古老的神话故事。"长娥奔月"是中国文化中的...

    析鲁迅《奔月》.docx

    《鲁迅的《奔月》:颠覆传统,开创审美新向度》 鲁迅的短篇小说《奔月》是其《故事新编》中的一篇,它颠覆了我们对古代神话的传统认知,尤其对嫦娥这一角色的刻画,使得这篇作品在文学史上占据了独特的地位。鲁迅...

    HTML5兔子奔月吃月饼游戏源码.zip

    在这个兔子奔月吃月饼游戏中,Canvas可能被用来绘制游戏场景,如月亮、兔子、月饼等元素,以及处理游戏中的动态效果,如兔子跳跃、月饼移动等。 JavaScript是HTML5游戏的核心,它负责处理游戏逻辑、用户交互以及...

    奔月生物:2021年半年度报告.rar

    【标题】:“奔月生物:2021年半年度报告.rar”是一个压缩文件,其中包含了一份关于奔月生物科技公司在2021年上半年业务运营、财务状况和业绩表现的详细报告。这类报告通常由上市公司发布,以供投资者、分析师和其他...

    HTML5奔月游戏 源码.zip

    在奔月游戏中,可能使用canvas来绘制角色、背景、轨迹等元素,并通过定时更新画面来实现动画效果。 2. **Web Audio API**:HTML5提供了Web Audio API,用于处理和播放音频。游戏往往需要背景音乐和音效,这个API...

    初中语文文摘生活且看嫦娥咋奔月

    初中语文文摘生活且看嫦娥咋奔月

    [鲁迅]析鲁迅《奔月》.docx

    鲁迅的《奔月》是其作品《故事新编》中的一部分,这篇小说通过对传统神话的颠覆和消解,展现了鲁迅独特的审美向度和先锋性的艺术手法。鲁迅在《奔月》中将嫦娥这一古代神话中的美丽仙女形象世俗化、恶俗化,描绘成一...

    奔月生物:2019年半年度报告.PDF

    【山东奔月生物科技股份有限公司2019年半年度报告】是该公司在当年的一个重要财务信息披露文件,旨在向公众和投资者展示公司在前六个月的经营状况、财务数据和重大事件。以下是对报告中关键知识点的详细解析: 1. *...

    HTML5兔子奔月吃月饼游戏源码

    HTML5兔子奔月吃月饼游戏源码是一款基于HTML5技术开发的互动小游戏,适用于网页环境,无需额外插件即可在现代浏览器中运行。这款游戏利用了HTML5的核心特性,包括Canvas绘图、JavaScript编程以及可能涉及的Web Audio...

    手绘实例:奔月 Photoshop3 图片处理 高级手绘技术技巧.doc

    手绘实例:奔月 Photoshop3 图片处理 高级手绘技术技巧

Global site tag (gtag.js) - Google Analytics