为Java EE 8和MicroProfile构建客户化Maven Archetype

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

“工于利其事,必先善其器”。在通过Jakarta EE和MicroProfile构建微服务项目之前,先构建客户化的maven archetype,这样每次就能自动生成包含java ee 8和MicroProfile相关的依赖和配置。

什么是Maven Archetype

简言之,Archetype就是Maven项目的模板工具。它定义了初始的样式和模型其它相同项目可以以此为基础来构建,比如quickstart archetype可以帮助快速构建maven项目,同样的如果有javaee8和MicroProfile的archetype那么相应的依赖包,配置都已经提供,可以快速生成一个工程。这可以大大提升开发的效率,可以专注于业务代码的编写,而无需重新手动配置依赖,可以节省时间,同时后续相同项目可以重用。详细的maven archetype解释,可以参考官网

创建Archetype

构建archetype的过程是相对直接的。一个maven archetype工程包含:

  • archetype描述文件 (archetype.xml 在目录: src/main/resources/META-INF/maven/)。它包含所有的archetype使用的文件以及相应的分类,比如配置,源文件等,这样才能正确被archetype生成器识别。
  • 项目原型文件 archetype插件会进行拷贝(src/main/resources/archetype-resources/)
  • 项目原型pom (pom.xml位于: src/main/resources/archetype-resources)用于生成最终项目的pom.xml样例
  • archetype pom 位于客户化archetype项目的根目录,跟其它maven项目一致。

Maven Archetype工程的目录结构如下:

archetype
|-- pom.xml
`-- src
    `-- main
        `-- resources
            |-- META-INF
            |   `-- maven
            |       `--archetype.xml
            `-- archetype-resources
                |-- pom.xml
                `-- src
                    |-- main
                    |   `-- java
                    |       `-- App.java
                    `-- test
                        `-- java
                            `-- AppTest.java

自动生成maven archetype样例工程

在了解了maven archetype的一些基本信息,现在就开始创建javaee 8 和MicroProfile合一的客户化archetype。有两种方式可以生成项目一般的手动构建如上说的archetype目录结果,可以参考官网。这种方式在这就不描述了。
下面通过mvn CLIming的方式命令的方式生成archetype 样例工程。

mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype -DgroupId=com.chrisopal -DartifactId=javaee8-microprofile-archetype -Dversion=0.0.1 -Dpackage=package

archetypeArtifactId是用到的maven archetype
groupId,artifactId, version, package等参数跟一般maven项目没有任何区别。

###客户化相关文件
生成的项目结构跟前面所示的结构相同,为了适配java ee 8和MicroProfile开发的需求,需要做相应的调整,最终的archetype项目结构如下:

javaee8-microprofile-archetype
|-- pom.xml
`-- src
    `-- main
        `-- resources
            |-- META-INF
            |   `-- maven
            |       `--archetype-metadata.xml
            `-- archetype-resources
                |-- pom.xml
                |-- README.md
                |-- Dockerfile
                |-- openliberty
                    `--server.xml
                `-- src
                    |-- main
                    |   `-- java
                    |       `-- com.chrisopal.resource
                    |           `-- greeting
                    |                   `-- GreetingResource.java
                    |           `-- Health
                    |                   `-- LivenessCheck.java
                    |           `-- GreetingApplication.java
                    |   `-- webapp.WEB-INF
                    |       `-- beans.xml


  • archetype-metadata.xml文件是archetype描述文件,主要描述哪些文件是最终项目的骨架需要的, 所有涉及的文件都在archetype-resource下面。
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
        name="javaee8-essentials-archetype"
        xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <fileSets>
        <fileSet filtered="true" packaged="false" encoding="UTF-8">
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
            </includes>
        </fileSet>
        <fileSet filtered="true" packaged="false" encoding="UTF-8">
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </fileSet>
        <fileSet filtered="true" packaged="false" encoding="UTF-8">
            <directory>src/main/webapp</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </fileSet>

        <fileSet filtered="false" packaged="false" encoding="UTF-8">
            <directory></directory>
            <includes>
                <include>.gitignore</include>

            </includes>
        </fileSet>

        <fileSet filtered="false" packaged="false" encoding="UTF-8">
            <directory>openliberty</directory>
            <includes>
                <include>server.xml</include>
            </includes>
        </fileSet>

        <fileSet filtered="true" packaged="false" encoding="UTF-8">
            <directory></directory>
            <includes>
                <include>README.md</include>
                <include>Dockerfile</include>
                <include>buildAndRun.sh</include>
            </includes>
        </fileSet>

    </fileSets>
</archetype-descriptor>
  • pom.xml 最终骨架项目的pom文件。主要放置了java ee和microprfile的相关依赖。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>${groupId}</groupId>
   <artifactId>${artifactId}</artifactId>
   <version>${version}</version>
   <packaging>war</packaging>

   <dependencies>
       <dependency>
           <groupId>javax</groupId>
           <artifactId>javaee-api</artifactId>
           <version>8.0</version>
           <scope>provided</scope>
       </dependency>
       <dependency>
           <groupId>org.eclipse.microprofile</groupId>
           <artifactId>microprofile</artifactId>
           <version>2.1</version>
           <type>pom</type>
           <scope>provided</scope>
       </dependency>
   </dependencies>

   <build>
       <finalName>${artifactId}</finalName>
   </build>
   <properties>
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
       <failOnMissingWebXml>false</failOnMissingWebXml>
   </properties>
</project>
  • openliberty 因为最终java ee 8和MicroProfile的运行时是OpenLiberty,这里放的是相应的server配置信息。
  • Dockerfile文件是用于生成基于openliberty服务器的docker镜像。我们只需copy生成的thinwar即可,满足云原生的CI/CD需求。
  • buildAndRun.sh简单的脚本用于编译,生成docker镜像和运行docker容器。
编译生成Archetype JAR包

运行打包,生成的archetype会被装载到本地的maven仓库。

mvn clean install

使用Archetype

使用Archetype有两种方式,一是直接通过命令行生成工具,而是通过IDE工具。

命令行工具

通过mvn CLI命令运行:

mvn archetype:generate                                  \
  -DarchetypeGroupId=com.chrisopal                      \
  -DarchetypeArtifactId=javaee8-microprofile-archetype  \
  -DarchetypeVersion=0.0.1                              \
  -DgroupId=com.demo                                    \
  -DartifactId=hello-javaee8mp

IDE工具

无论用Eclipse还是IntelliJ IDEA,都需要生成**archetype-catalog.xml**。通过执行命令 mvn archetype:crawl 它会扫描maven仓库目录下面所有的jar包,一般在~/.m2/repository下面。然后生成archetype-catalog.xml文件:

?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"
    xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <archetypes>
    <archetype>
      <groupId>org.apache.maven.archetypes</groupId>
      <artifactId>maven-archetype-archetype</artifactId>
      <version>1.0</version>
      <description>archetype</description>
    </archetype>
    <archetype>
      <groupId>com.chrisopal</groupId>
      <artifactId>javaee8-microprofile-archetype</artifactId>
      <version>0.0.1</version>
      <description>javaee8-microprofile-archetype</description>
    </archetype>
  </archetypes>
</archetype-catalog>

IDEA导入请参考这里; Eclipse通过Preference>Maven>Archetype>Add Local Catalog 导入生成的文件,然后就可以进行选择。

##总结

本文描述了如何通过客户化maven archetype,生成Java EE 8和MicroProfile工程用于快速构建微服务和云原生应用,相应的代码可以在Github找到。

##参考

把项目打包成Maven Archetype(多模块项目脚手架) maven生成多模板项目archetype 阅读详情

相关推荐

Maven基础学习:Archetype项目骨架生成实例

Maven ArchetypeMaven的项目模板生成工具,它允许开发者快速创建预定义好的项目结构。这在创建新的项目时能够节省大量的时间,减少配置错误,并保证项目结构的一致性。Archetype本身定义了一套项目结构模板,包括目录结构、文件布局以及各种约定配置。这些定义允许开发人员能够快速地创建具有相似结构的项目,从而实现了项目结构的快速标准化。ArchetypeMaven 的一项强大功能,它允许开发者创建项目模板。

weixin_33557333的博客 1221

Maven Archetype

参考: https://www.baeldung.com/maven-archetype multi-module-maven-archetypes maven-archetype工程目录 archetype-root/ ├── pom.xml -----archetype根pom └── src └── main ├── java └── resources ├── archetype-resources ---------resourc

罗小爬的技术宝书 2万+

全面理解Maven Archetype及其使用

Maven ArchetypeMaven项目对象模型(POM)的一部分,它定义了一个项目的初始结构,包括文件目录的布局、POM配置以及构建设置。Archetype使得开发者能够快速地生成一个具有标准项目结构默认构建配置的项目,极大地简化了项目初始化过程,尤其在快速启动新项目维护项目模板的一致性方面具有重要作用。Maven生命周期包含三个主要的构建阶段:清理(clean):移除之前构建生成的所有文件。构建(build):编译源代码,测试,打包等。安装(install)

weixin_42583683的博客 1087

Maven 三种archetype说明合集【转载】

Archetype 是一个 Maven 项目模板工具包。原型被定义为原始模式或模型,从中创建所有其他相同类型的东西。这些名称适合我们尝试提供一个系统,该系统提供生成Maven项目的一致方法。Archetype 将帮助作者为用户创建 Maven 项目模板,并为用户提供生成这些项目模板的参数化版本的方法。使用archetype构建项目,不用让我们在添加各种pom文件或者copy代码。构建项目骨架简单迅速。玩的开心!......

耕耘——从菜鸟到高手的蜕变 6559

Maven 三种archetype说明

新建Maven project项目时,需要选择archetype。 那么,什么是archetypearchetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包。一个原型被定义为从其中相同类型的所有其它事情是由一个原始图案或模型。名称配合,因为我们正在努力提供一种系统,该系统提供了一种生成Maven项目的一致的手段。原型将帮助作者为用户创建Maven项目模板,并为用户提供了

我是程序媛,我骄傲 9万+

maven archetype 普通的maven有啥区别

Maven ArchetypeMaven的一个插件,主要用于为用户创建基于某个模版的新项目。当你开始一个新项目,而不是从零开始,你可以选择一个符合你需求的archetype,它会帮助你生成项目结构一些基本代码,比如目录结构、配置文件等。简而言之,Maven ArchetypeMaven的一部分,它专注于为Maven项目提供一个初始的结构配置模板。而“普通的Maven”通常指的是Maven工具本身,它负责项目的构建依赖管理等更广泛的功能。Maven可以通过其POM文件管理项目的构建、报告文档。

一季南凉的博客 8484

maven 工程结构 archetype 模板

maven 工程结构 archetype 模板

Ares5k 3256

maven的41个模板中文翻译

maven提供的41个骨架原型分别是: 1: appfuse-basic-jsf (创建一个基于Hibernate,SpringJSF的Web应用程序的原型) 2: appfuse-basic-spring(创建一个基于Hibernate,SpringSpring MVC的Web应用程序的原型) 3: appfuse-basic-struts(创建一个基于Hibernate,SpringStruts 2的Web应用程序的原型) 4: appfuse-basic-tapestry(创建一个基于Hiber

qq_44241881的博客 669

maven-archetype-plugin 原型插件详解

若通过指定文件的方式从原型元工程生成原型工程,多层级的自定义属性都不会生成标签在元数据文件中即使手动在元数据文件中补充了多层级属性的标签,在通过可运行原型工程生成目标项目时,也无法通过正确的引用到实际配置值当我们在原型元工程中就定义好模板文件需要引用的单级自定义属性,并通过命令创建的原型工程。原型工程中的模板文件也同时定义好了自定义属性引用帮助我们生成文件但,Velocity解析的非常不智能!原型元工程中提前编写好的单层级的自定义属性引用,经常无法正确的在原型工程中生成,

qq_38074398的博客 3898

Maven教程】(十六):Archetype—— 使用 Archetype 的步骤及批处理方式、编写 ArchetypeArchetype Catalog~

在编写本文的时候,Maven中央仓库中已经包含了249个 Archetype(详见此外,还有大量没有发布到中央仓库的Archetype分布在其他Maven仓库中。任何人都不可能全部了解它们,因此这里只介绍几个比较常用的Archetypemaven-archetype-quickstart 可能是最常用的 Archetype, 当 maven-archetype-plugin 提示用户选择Archetype 的时候,它就是默认值。一个包含 JUnit 依赖声明的 pom.xml。

Technology changes the world of life 3080

创建自定义的archetype(项目模板)

一、archetype简介 Archetype是一个Maven项目的模板工具包,它定义了一类项目的基本架构。Archetype为开发人员提供了创建Maven项目的模板,同时它也可以根据已有的Maven项目生成参数化的模板。通过archetype,开发人员可以很方便地将一类项目的最佳实现应用到自己的项目中。在一个Maven项目中,开发者可以通过archetype提供的范例快速入门并了解该项目的结构与特点。 Maven Archetype由下面几个模块组成: maven-archetype-plugin:Arc

weixin_42342222的博客 2049

自定义Maven Archetype模板工程

`Archetype`是一个Maven项目的模板工具包,它定义了一类项目的基本架构。`Archetype`为开发人员提供了创建Maven项目的模板,同时它也可以根据已有的Maven项目生成参数化的模板。

ThinkWon的博客 4358

IDEA2023创建Maven Archetype创建旧版本Maven的区别,主要是针对Maven Archtype。

写在最后:有些人可能觉得前面两种方法完全是在浪费时间,之所以把三种方式全部列出来,是因为我在遇到这些问题的时候,几乎看到的都是第一种或第二种,没有根本上解决我的问题,浪费了大量的时间,所以在这里将我知道的方法都列出来,作作比较。到这里就结束了,不敢保证每个人的问题都能解决,没有解决的也可以适当作作参考,我是当时自己看着网上视频做由于idea版本不同所以没能成功,然后自己去百度琢磨出来一套方法解决了我自己的问题。将两边的jdk环境(ProjectModules)都配置为一样的,我这边是全都配置为17。

Jay97_的博客 1万+

JAVA-带您弄清创建Maven项目-Archetype里那些看完茫然不解的骨架

您是否也在创建一个Maven项目时为选择哪种Archetype而手足无措?您是否也想弄清楚Archetype这么多选择到底是什么?请您点进这篇博客,让我们一起弄清楚Archetype里有什么奥秘。

向诸位大佬虚心学习 4480

Maven之自定义archetype生成项目骨架(构建脚手架项目)

maven构建脚手架项目 一、生成自定义archetype 创建maven项目,每次都要选择一个骨架,总有一部分东西是我们不需要的,有时候创建项目时选择了一个骨架,用的时候,需要删删减减的,解决办法就是创建一个自己的自定义骨架,每次创建maven的时候,就使用自己的骨架,相对方便多了。 archetype自定义的优势: 可以集成公共的开发组件,提高开发效率。公司内部对中间件的封装,可以集成进来;开源社区的优质轮子,可以集成进来。这样,项目可以有大量的优秀组件,避免重复造轮子。另外,如果需要创建新项目,可

付之一笑的专栏 5173

Maven Archetype使用教程与具体使用方法

Maven Archetype 是一个非常实用的工具,它可以帮助我们快速创建符合我们需求的 Maven 项目。我们可以使用默认的 Archetype,也可以自定义 Archetype 来满足我们的需求。定义 Archetype 后,我们可以将其上传到本地或远程 Maven 仓库中,以便其他开发人员使用。Maven 会根据我们输入的信息创建项目。在选择 Archetype 后,Maven 将会提示输入项目信息,例如 GroupId、ArtifactId、Version、Package 等等。

2301_76418831的博客 3150

maven-archetype(脚手架)快速创建

maven-archetype我们通常称它为脚手架,用于项目初期快速生成项目结构,统一项目框架。maven自带多种脚手架,通常对于团队而言,很难满足需求,需要自定义一些适合自己团队的脚手架。 使用自带脚手架创建项目 mvn archetype:generate -DarchetypeCatalog=local 用于展示本地local已有的maven脚手架。 在结果中选择archetype的序号,本...

ITtraveler的专栏 3383

MAVEN:自定义模板Archetype的创建

有时候MAVEN自带的模板库并不能满足我们创建项目的需求,为了能够快速创建项目,免去每次复杂的配置,所以我们需要自定义模板库,本次操作基于vscode的环境。在MAVEN的仓库里,有个archetype-catalog.xml文件里面记载了模板的坐标信息,可以方便IDEA通过坐标添加模板,而VSCODE可以自动扫描得到自定义的模板库,无需手动添加。

qq_55038440的博客 1395
上一篇: 云原生和微服务时代的Java EE, Microprofile和Jakarta EE
chrisopal09
博客等级 码龄17年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值