老大说新项目的结构和 xxx 项目一样就可以了,我 ……(二)

简介: 又要开发新项目了,还是创建新项目,怎么办?老大说按照 xxx 项目的结构创建一个新项目就可以了。

archetype 模版项目介绍


使用 IDEA 打开之后发现,还是一个 Maven 项目。


archetype-resources

打开 pom 文件,可以看到里面 ${groupId}${artifactId}${version} 使用占位符指定的组织版本,这些就是新创建项目时指定的。


archetype-metadata.xml

archetype-metadata.xml 里面为元数据配置。

  • fileSet:用来生成一些项目中的文件。如果文件或目录名称包含 __property__ 模式,则将其替换为相应的属性值。
属性 类型 描述
filtered boolean 过滤文集,将指定文件直接复制不需要修改。默认值为:false。
packaged boolean 打包文件,指定文件将在package属性之前的目录结构中生成/复制。它们可以是非打包的,这意味着所选文件将在没有该前缀的情况下生成/复制。默认值为:false。
encoding String 过滤内容时使用的编码。

fileSet 包含以下元素:

元素 类型 描述
directory String 生成项目文件的目录
includes/include* List 包含文件
excludes/exclude* List 排除文件


因为生成项目不需要 .idea *.iml 文件,所以直接删除:

  • module 就是要生成的项目一共几个 module
属性 类型 描述
id String The module's artifactId.
dir String The module's directory.
name String The module's name.

 

元素 类型 描述
fileSets/fileSet* List 文件
modules/module* List 模块

可以看出里面就是自己的项目模版。

__rootArtifactId__-controller 在生成的时候,就会根据传入的 artifactId 生成指定的 module 名字。


使用

  1. clean install

  1. IDEA Add Archetype

  1. 选择使用 Archetype 生成新项目

  1. 填写新生成项目的名字等

  1. 生成新项目


扩展

Q: 如何自定义包路径?

A: 可以使用 requiredProperties 自定义参数。通过传入自定义的参数,来生成自定的包路径。

比如发现新生成项目的包路径都是 com.liuzhihang.archetype,这样肯定是不行的,每个项目有每个项目自己的包路径。只需要做以下修改:

  1. requiredProperties 添加到项目中,然后添加新变量 middlePackage
<requiredProperties>
    <!--使用archetype时候必须要求输入的参数-->
    <requiredProperty key="groupId">
        <!--可以设置默认值,使用archetype会使用默认值-->
        <defaultValue>com.liuzhihang</defaultValue>
    </requiredProperty>
    <requiredProperty key="package">
        <defaultValue>com.liuzhihang</defaultValue>
    </requiredProperty>
    <requiredProperty key="middlePackage">
        <defaultValue>${rootArtifactId}</defaultValue>
    </requiredProperty>
</requiredProperties>
  1. 修改模版的文件名

如果文件或目录名称包含 __property__ 模式,则将其替换为相应的属性值。到这里还不行,因为生成的包名还没改。

  1. 修改内部文件的包路径。包括 .java 、** .xml** 、** .properties** 等。

  1. 重新 clean install

注:此时可能会报错,需要在 src/test/resources/projects/basic/archetype.properties 下添加 middlePackage=basic 再重新尝试下。

在生成时注意指定 middlePackage 属性。


Q: 我想自定义 Application 的名字怎么弄?

A: 同样使用 requiredProperties 自定义参数。

<requiredProperty key="appName">
</requiredProperty>
复制代码

当然也可以起一个通用的名字。


Q: 别的小伙伴怎么用?

A: 当然是 deploy 到私服了, 在 pom 里面添加如下配置,指定自己公司的私服。deploy ,这样就可以和小伙伴一起愉快的使用啦。

<!-- 远程仓库 -->
<distributionManagement>
    <repository>
        <id>releases</id>
        <name>Nexus Release Repository</name>
        <url>http://liuzhihang.com:xxxx/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://liuzhihang.com:xxxx/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>


Q: 我要怎么从 IDEA 删除 Archetype ?

A: 这么好用怎么舍得删除呢?只要找到以下路径

liuzhihang % > pwd
/Users/liuzhihang/Library/Caches/JetBrains/IntelliJIdea2020.1/Maven/Indices


里面有一个 UserArchetypes.xml, 打开,删除掉里面的 archetype 就行。

目录
相关文章
|
Java 开发者 Spring
springboot @RequiredArgsConstructor @Lazy解决循环依赖的原理
【5月更文挑战第16天】在Spring Boot中,@RequiredArgsConstructor 和 @Lazy 是两个有用的注解,它们分别用于简化构造函数的生成和控制Bean的加载时间。下面详细解析这两个注解的概念、优缺点以及在实际应用中的示例。
1897 1
|
Java API Android开发
你有没有想过自己写一个Xposed模块?教程来了~(一)
在互联网上,关于Xposed模块编写的教程可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化(如Eclipse退出安卓编程舞台,AndroidStudio 不断升级导致其一些设置也随之变化等)也正因此,网上的教程往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非libs文件夹……种种错误或者落伍的教程对新手产生了很大的误导。
640 0
|
消息中间件 JSON Java
SpringBoot整合RabbitMQ实践详解
SpringBoot整合RabbitMQ实践详解
563 0
|
NoSQL Ubuntu Linux
Linux下编译安装最新稳定版Redis
Linux下编译安装最新稳定版Redis
Linux下编译安装最新稳定版Redis
|
Android开发
Android源代码定制:Overlay目录定制|调试Overlay资源是否生效
Android源代码定制:Overlay目录定制|调试Overlay资源是否生效
1483 0
|
编解码 计算机视觉 Python
pyautogui库简单实现的python刷课程序
pyautogui库简单实现的python刷课程序
|
XML 开发框架 Java
【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架
【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架
1184 0
【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架
|
并行计算 算法 异构计算
基于FPGA的图像拼接算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像拼接算法实现,包括tb测试文件和MATLAB辅助验证
|
SQL Java 数据库
springboot整合Quartz实现动态配置定时任务
在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能。
3851 0
|
JavaScript 小程序
微信小程序数据绑定及渲染
微信小程序数据绑定及渲染
444 1

热门文章

最新文章