背景:
经常要搭建新项目架构,以前都是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,成功了
参考:
相关推荐
标题中的“【飞天奔月出品】windows版nginx 快速操控神器(启动start,关闭stop,重启restart) 批处理”指的是一个专为Windows操作系统设计的Nginx管理工具,它通过批处理脚本实现了Nginx服务的便捷启动、停止和重启...
游戏源码分享下载 --- hjby.zipHTML5小游戏【火贱兔奔月--425款经典优秀H5小游戏合集】游戏源码分享下载 --- hjby.zipHTML5小游戏【火贱兔奔月--425款经典优秀H5小游戏合集】游戏源码分享下载 --- hjby.zipHTML5小...
这是一个关于Web前端开发的知识点详解,主要聚焦在HTML、CSS和JavaScript这三门核心技术上,以"兔子奔月吃月饼游戏源码"为实例进行解析。 首先,HTML(HyperText Markup Language)是构建网页的基础,它定义了网页...
在火箭兔奔月这个游戏源码中,我们可以期待看到以下关键技术和概念: 1. **Canvas绘图**:游戏的主要画面很可能是通过`canvas`元素进行绘制的,包括火箭兔的动画、月球背景和其他游戏元素。开发者会利用JavaScript...
HTML5奔月游戏是一款完全基于HTML5技术开发的互动小游戏,玩家可以扮演一只兔子,目标是在游戏中尽可能地收集月饼并安全抵达月球。这款游戏的亮点在于其无需任何额外的插件或软件支持,只需浏览器就能运行,这得益于...
这篇文档介绍了如何使用Adobe Photoshop软件创作一张奔月女孩的梦幻艺术照片效果。以下是详细步骤: 1. **新建文件与导入素材**: - 首先创建一个新文件,大小与素材1相同,命名为"奔月女孩"。 - 然后打开素材1,...
《奔月》是鲁迅先生的一篇短篇小说,收录于其《故事新编》之中,通过对传统神话的再创作,鲁迅以戏拟的手法揭示了深刻的社会与人性问题。这篇作品通过对后羿这一昔日英雄形象的塑造,反映出鲁迅对时代变迁下英雄命运...
【标题】"小游戏源码-火贱兔奔月.rar" 提供的是一个小型游戏的源代码,名为"火贱兔奔月"。这类源码通常用于教学、学习或游戏开发者的参考,帮助开发者理解游戏的基本架构和编程逻辑。 【描述】"小游戏源码-火贱兔...
奔月生物:2021年半年度报告.PDF
《H5游戏源码解析:奔月游戏》 在当今数字化时代,HTML5(简称H5)技术以其跨平台、轻量级、易部署的特点,成为制作网页游戏的热门选择。"奔月游戏"作为一款H5游戏,其源码为我们提供了一窥H5游戏开发的窗口。本文...
【长娥奔月模板下载TIF】是一个与网页设计相关的资源,主要提供了一种以"长娥奔月"为主题的网页模版。这个模版可能是为了庆祝中国传统节日,如中秋节,或者用于讲述中国古老的神话故事。"长娥奔月"是中国文化中的...
《鲁迅的《奔月》:颠覆传统,开创审美新向度》 鲁迅的短篇小说《奔月》是其《故事新编》中的一篇,它颠覆了我们对古代神话的传统认知,尤其对嫦娥这一角色的刻画,使得这篇作品在文学史上占据了独特的地位。鲁迅...
在这个兔子奔月吃月饼游戏中,Canvas可能被用来绘制游戏场景,如月亮、兔子、月饼等元素,以及处理游戏中的动态效果,如兔子跳跃、月饼移动等。 JavaScript是HTML5游戏的核心,它负责处理游戏逻辑、用户交互以及...
【标题】:“奔月生物:2021年半年度报告.rar”是一个压缩文件,其中包含了一份关于奔月生物科技公司在2021年上半年业务运营、财务状况和业绩表现的详细报告。这类报告通常由上市公司发布,以供投资者、分析师和其他...
在奔月游戏中,可能使用canvas来绘制角色、背景、轨迹等元素,并通过定时更新画面来实现动画效果。 2. **Web Audio API**:HTML5提供了Web Audio API,用于处理和播放音频。游戏往往需要背景音乐和音效,这个API...
初中语文文摘生活且看嫦娥咋奔月
鲁迅的《奔月》是其作品《故事新编》中的一部分,这篇小说通过对传统神话的颠覆和消解,展现了鲁迅独特的审美向度和先锋性的艺术手法。鲁迅在《奔月》中将嫦娥这一古代神话中的美丽仙女形象世俗化、恶俗化,描绘成一...
【山东奔月生物科技股份有限公司2019年半年度报告】是该公司在当年的一个重要财务信息披露文件,旨在向公众和投资者展示公司在前六个月的经营状况、财务数据和重大事件。以下是对报告中关键知识点的详细解析: 1. *...
HTML5兔子奔月吃月饼游戏源码是一款基于HTML5技术开发的互动小游戏,适用于网页环境,无需额外插件即可在现代浏览器中运行。这款游戏利用了HTML5的核心特性,包括Canvas绘图、JavaScript编程以及可能涉及的Web Audio...
手绘实例:奔月 Photoshop3 图片处理 高级手绘技术技巧