手把手maven-archetype 模板工程构建并发布远端仓库

本文详细介绍了如何定义和创建Mavenarchetype模板工程,以及如何使用该模板生成新项目。过程中涉及到了解决本地配置问题,如镜像下载超时,以及如何将模板发布到远端仓库进行自动化部署。

目录

1.定义期望的模板工程(依托此工程构建archetype模板工程)

2.生成对应的archetype工程(真正的模板工程,每次新建工程使用)

3. 新建工程(依托archetype模板工程,新建业务工程)

过程问题

4.发布到远端(发布到远端,可结合git-ci等工具构建自动化)


1.定义期望的模板工程(依托此工程构建archetype模板工程)

  1. 按照自己的业务基于常见的代码架构,整理模板工程建立合适的目录结构,可以通过idea工具快速生成标准的maven工程

  2. 工程名称例如: myproject,目录内容如下(此目录结构只是示例):

$ tree -L 3
.
|-- README.md
|-- images
|   `-- matrix.png
|-- pom.xml
|-- springboot-flink.iml
`-- src
    `-- main
        |-- java
        `-- resources
​
5 directories, 4 files

2.生成对应的archetype工程(真正的模板工程,每次新建工程使用)

maven通过archetype工程来作为母版

myproject 工程根目录运行:

mvn clean archetype:create-from-project -Dmaven.test.skip --setings maven-setings文件

生成的目录示例- 此目录在 target/generated-sources/archetype 目录下,依据此目录新建工程, 新建一个工程myproject-archetype,如下

|-- README.md
|-- images
|   `-- matrix.png
|-- pom.xml   ①
|-- springboot-flink-archetype.iml
`-- src       ②
    |-- main
    |   `-- resources
    |       |-- META-INF
    |       |   `-- maven
    |       |       `-- archetype-metadata.xml
    |       `-- archetype-resources
    |           |-- README.md
    |           |-- images
    |           |   `-- matrix.png
    |           |-- pom.xml
    |           `-- src
    |               `-- main
    |                   |-- java
    |                   `-- resources
    `-- test
        `-- resources
            `-- projects
                `-- basic
                    |-- archetype.properties
                    `-- goal.txt

注释

  1. pom.xml: 此pom的packag类型为维持 <packaging>maven-archetype</packaging>,注意非1小节中myproject工程根目录的pom,而是原工程myproject编译后 target/generated-sources/archetype 地址的pom;大致内容如下

    <groupId>XXXX</groupId>
      <artifactId>XXXX-archetype</artifactId>
      <version>XXXX-SNAPSHOT</version>
      <packaging>maven-archetype</packaging> <!-- 此类型不要动!!-->
    ​
      <name>XXXX-archetype</name>
    ​
      <build>
        <extensions>
          <extension>
            <groupId>org.apache.maven.archetype</groupId>
            <artifactId>archetype-packaging</artifactId>
            <version>3.2.1</version>
          </extension>
        </extensions>
    ​
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-archetype-plugin</artifactId>
              <version>3.2.1</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    ​
      <description>基于XXXXX</description>

  2. src目录: 此目录是原始工程myproject target/class下生成的目录结构,不要动直接占到新的工程中

3. 新建工程(依托archetype模板工程,新建业务工程)

  1. 模板工程安装到本地maven仓库mvn install

  2. 根据自己的模板新建工程: 命令如下图

mvn archetype:generate 
-DarchetypeGroupId=******   # 模板工程的groupID
-DarchetypeArtifactId=****** # 模板工程的artifactID
-DinteractiveMode=false  
-DarchetypeVersion=***** # 目标工程的版本
-DgroupId=***** # 目标工程groupID
-DartifactId=*****  # 目标工程的artifactID

过程问题

  1. 依据新的archetype新建工程可能会卡住报如下错误:

[DEBUG]Searching for remote catalog:http://repo1.maven.org/maven2/archetype-catalog.xml

原因:此问题为 本地配置的maven镜像地址下载超时;

解决方案: 1. 更改为国内镜像或者自己的私服即可 2.手动下载或者google下有很多解法挑一个即可

   2. 新建工程时候目录必须为空或者目录内不能存在pom文件

4.发布到远端(发布到远端,可结合git-ci等工具构建自动化)

  1. 更新pom文件: 定义远端仓库

    <groupId>XXXX</groupId>
      <artifactId>XXXX-archetype</artifactId>
      <version>XXXX-SNAPSHOT</version>
      <packaging>maven-archetype</packaging>
    ​
      <name>XXXX-archetype</name>
    ​
      <build>
        <extensions>
          <extension>
            <groupId>org.apache.maven.archetype</groupId>
            <artifactId>archetype-packaging</artifactId>
            <version>3.2.1</version>
          </extension>
        </extensions>
    ​
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-archetype-plugin</artifactId>
              <version>3.2.1</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    ​
      <description>基于XXXXX</description>
    ​
    <!-- 新增远端发布地址-->
      <distributionManagement>
        <snapshotRepository>
          <id>snapshots</id>
          <name>XXn-snapshot</name>
          <url>XXX/</url>
        </snapshotRepository>
        <repository>
          <id>central</id>
          <name>XXX-release</name>
          <url>XXX/</url>
        </repository>
    ​
      </distributionManagement>

  2. 发布操作: mvn deploy:  此处可以结合CI工具构建自动化发布,对模板工程改动直接发布到远端仓库

    mvn clean -Dusername=${USER} -Dpassword=${PASSWORD} deploy -T 8   -Dcheckstyle.skip=false
  3. 发布2如果构建自动化,需要在对应的CI中制作maven、jdk等环境,用来编译此arhetype工程

此处有现成的docker 镜像,需要可私

### 如何选择合适的Maven Archetype 在创建新的Maven模块时,选择适合的Archetype取决于目标项目的性质以及所需的功能。以下是关于`maven-archetype-quickstart`和`maven-archetype-webapp`的具体分析: #### 1. **maven-archetype-quickstart** 这是一个最基本的Maven项目模板,适用于普通的Java应用程序开发[^1]。其主要特点如下: - 自动生成的基础结构包括一个简单的Java类 (`App.java`) 和对应的单元测试类 (`AppTest.java`)。 - `pom.xml` 文件中默认包含了JUnit依赖项,便于编写和运行单元测试。 - 不涉及任何特定的应用场景(如Web应用),仅用于构建标准的Java程序。 对于那些不需要复杂框架支持或者仅仅是学习目的的小型实验性项目来说,这是非常理想的选择。 ```xml <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> ``` #### 2. **maven-archetype-webapp** 此模板专为基于Servlet/JSP技术栈的传统Web应用程序设计而准备[^5]。它的特性有: - 自动设置好了一个WAR打包形式(`packaging=war`) 的POM文件; - 提供了初始页面(index.jsp),设置了必要的部署描述符(web.xml)路径; - 结构清晰地区分出了资源文件夹(src/main/webapp/)与其他源码区域。 如果计划建立的是面向互联网的服务端解决方案,则应该优先考虑采用此类别的原型作为起点。 ```java // Example of a simple servlet that could be part of the web application. @WebServlet("/hello") public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().println("Hello from Servlet!"); } } ``` ### 总结建议 - 如果您打算启动一个新的纯Java控制台程序或者是想探索基础概念的学习环境,请选用`maven-archetype-quickstart`. - 对于旨在搭建网站服务或者其他任何形式上的网络交互平台而言,则推荐利用`maven-archetype-webapp`. 通过以上对比可以看出两者之间的显著差异在于用途范围的不同:前者更偏向简单实用性的桌面级操作;后者则针对复杂的服务器端逻辑处理需求进行了优化调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boundary边界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值