整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Maven Archetype 秘籍:輕松打造項(xiàng)目模

          Maven Archetype 秘籍:輕松打造項(xiàng)目模板

          在多數(shù)企業(yè)的軟件開發(fā)生態(tài)中,項(xiàng)目初始化往往遵循一套既定的模板規(guī)范,通常需要集成一些公司內(nèi)部的中間件、通用的代碼分層、標(biāo)準(zhǔn)的代碼格式等等。傳統(tǒng)的項(xiàng)目啟動(dòng)方式是簡單復(fù)制舊項(xiàng)目并手動(dòng)調(diào)整包名與配置,不僅效率低下,且容易因人為疏忽而導(dǎo)致錯(cuò)誤,增加了項(xiàng)目的維護(hù)成本與風(fēng)險(xiǎn)。

          Maven Archetype 作為一種項(xiàng)目模板工具,能夠讓我們輕松定義項(xiàng)目的基礎(chǔ)結(jié)構(gòu),包括必要的依賴、配置文件模板乃至特定的代碼片段,從而實(shí)現(xiàn)新項(xiàng)目的標(biāo)準(zhǔn)初始化。這不僅極大地簡化了項(xiàng)目創(chuàng)建的流程,減少了重復(fù)勞動(dòng),還確保了項(xiàng)目的一致性和規(guī)范性,讓開發(fā)者能夠更專注于核心業(yè)務(wù)邏輯的實(shí)現(xiàn)。

          什么是 Maven Archetype

          Maven ArchetypeMaven 項(xiàng)目中的一種模板機(jī)制,它可以根據(jù)已有項(xiàng)目生成一個(gè)模板項(xiàng)目,為我們快速創(chuàng)建一個(gè) Maven 項(xiàng)目的骨架結(jié)構(gòu),包括目錄、文件和配置等。這樣,我們就可以基于這個(gè)標(biāo)準(zhǔn)化的項(xiàng)目結(jié)構(gòu)快速啟動(dòng)新項(xiàng)目,而無需從頭開始編寫所有內(nèi)容。

          如何自定義 Archetype

          1. Mavensettings.xml 復(fù)制一份到.m2 目錄下。
          2. 進(jìn)入項(xiàng)目根目錄,執(zhí)行 maven 命令:
          mvn archetype:create-from-project
          

          執(zhí)行成功后,項(xiàng)目根目錄下會(huì)生成 target 文件夾。

          1. 刪除項(xiàng)目根目錄下 target 目錄下的無用文件夾(如.ideatesttarget 等)。
          2. target\generated-sources\archetype 復(fù)制一份到任意位置(防止被意外 mvn clean)。
          3. 打開復(fù)制出來的項(xiàng)目,修改父 pom
          • 添加缺失的 module 信息
          <modules>
              <module>${rootArtifactId}-adapter</module>
              <module>${rootArtifactId}-app</module>
              <module>${rootArtifactId}-client</module>
              <module>${rootArtifactId}-common</module>
              <module>${rootArtifactId}-domain</module>
              <module>${rootArtifactId}-infrastructure</module>
              <module>${rootArtifactId}-start</module>
          </modules>
          

          修改 dependencyManagement 下依賴引用的各個(gè) module,改為如下格式:

          <dependency>
              <groupId>${groupId}</groupId>
              <artifactId>${rootArtifactId}-adapter</artifactId>
              <version>${project.version}</version>
          </dependency>
          

          如何使用 Archetype

          1. 在修改完成之后的 archetype 項(xiàng)目根目錄下,執(zhí)行 maven 命令:
          mvn install
          

          執(zhí)行成功后,.m2\repository 目錄下會(huì)生成 archetype-catalog.xml 文件。

          1. 將此文件添加到 IDEA 的 archetype catalogs
          1. 新建項(xiàng)目時(shí),選擇剛剛的 CatalogArchetype,填寫項(xiàng)目信息后直接創(chuàng)建即可。

          如何共享 Archetype

          1. 在修改完成之后的 Archetype 項(xiàng)目根目錄下,執(zhí)行 maven 命令:
          mvn deploy
          
          1. archetype-catalog.xml上傳至 oss,得到一個(gè) url
          2. 團(tuán)隊(duì)其他成員可將此 url 添加到 IDEA 的 archetype catalogs 中,其余使用 Archetype 步驟同上。

          總結(jié)

          Maven Archetype 是一個(gè)強(qiáng)大的工具,它可以幫助我們快速創(chuàng)建項(xiàng)目的骨架結(jié)構(gòu),節(jié)省了繁瑣的配置和初始化工作。通過自定義 Archetype,我們可以根據(jù)項(xiàng)目需求定制模板,提高開發(fā)效率。使用 Archetype 時(shí),只需在 IDEA 中添加相應(yīng)的 CatalogArchetype,填寫項(xiàng)目信息即可快速創(chuàng)建項(xiàng)目。希望本文能幫助你更好地了解和使用Maven Archetype

          參考資料

          1. https://maven.apache.org/archetype/index.html
          2. https://baeldung-cn.com/maven-archetype

          作者:當(dāng)貝技術(shù)團(tuán)隊(duì)

          來源-微信公眾號(hào):當(dāng)貝技術(shù)團(tuán)隊(duì)

          出處:https://mp.weixin.qq.com/s/516n2bPvZd1NZh6juSS92A

          、相關(guān)技術(shù)棧版本概覽

          技術(shù)棧

          版本

          說明

          java

          ≥17.0.2

          JDK版本

          springframework

          6.1.11

          JavaEE開發(fā)框架

          springboot

          3.3.2

          容器+MVC框架

          gradle

          8.9

          自動(dòng)化構(gòu)建工具

          lombok

          1.18.32

          Java工具類庫

          knife4j

          4.5.0

          Swagger增強(qiáng)組件

          前提還是需要具備JAVA開發(fā)的基礎(chǔ)概念,比如安裝JDK環(huán)境。

          二、整合相關(guān)技術(shù)棧

          1. 創(chuàng)建空項(xiàng)目

          使用 Spring Initializr 「https://start.spring.io/」快速創(chuàng)建Spring項(xiàng)目

          Dependencies 對(duì)話框中搜索并添加 web 依賴關(guān)系,如屏幕截圖所示。點(diǎn)擊“生成”按鈕,下載壓縮包,并將其解壓縮到計(jì)算機(jī)本地。

          Spring Initializr


          2. 編寫基礎(chǔ)的 Gradle 相關(guān)腳本

          以下按相對(duì)項(xiàng)目的根目錄進(jìn)行說明,如文件不存在 可以手動(dòng)創(chuàng)建:

          • gradle.properties
          # 當(dāng)前項(xiàng)目版本
          projectVersion=0.1.0-SNAPSHOT
          
          # SpringBoot版本
          springbootVersion=3.3.2
          
          # JDK最低版本
          jdkVersion=17
          • build.gradle
          buildscript {
              repositories {
                  mavenLocal()
                  maven { url "https://maven.aliyun.com/repository/public/" }
              }
          
              dependencies {
                  /* 添加插件依賴路徑(通過jar方式) */
                  classpath "org.springframework.boot:spring-boot-gradle-plugin:${springbootVersion}"
              }
          }
          
          allprojects {
              apply plugin: "idea"
              apply plugin: "java"
              apply plugin: "org.springframework.boot"
              apply plugin: "io.spring.dependency-management"
          
              group='com.app4j.stack'
              version=projectVersion
          
              java {
                  toolchain {
                      languageVersion=JavaLanguageVersion.of(jdkVersion)
                  }
              }
          
              configurations {
                  // 排除tomcat
                  all*.exclude module: 'spring-boot-starter-tomcat'
                  compileOnly {
                      extendsFrom annotationProcessor
                  }
              }
          
              repositories {
                  mavenLocal()
                  maven { url "https://maven.aliyun.com/repository/public/" }
              }
          
              dependencies {
                  // Lombok
                  compileOnly 'org.projectlombok:lombok'
                  annotationProcessor 'org.projectlombok:lombok'
                  // Spring Web
                  implementation 'org.springframework.boot:spring-boot-starter-web'
                  // 使用undertow 替換tomcat
                  implementation 'org.springframework.boot:spring-boot-starter-undertow'
              }
          }


          3. 創(chuàng)建 Springboot 啟動(dòng)類

          com.app4j.web.WebApplication

          package com.app4j.web;
          
          import lombok.extern.slf4j.Slf4j;
          import org.springframework.boot.autoconfigure.SpringBootApplication;
          import org.springframework.boot.builder.SpringApplicationBuilder;
          
          /**
           * @author eric.hao
           * @since 2024/07/18
           */
          @Slf4j
          @SpringBootApplication
          public class WebApplication {
          
              public static void main(String[] args) {
                  new SpringApplicationBuilder(WebApplication.class).run(args);
                  log.info("[App4j] Application Started.");
              }
          }

          ok 項(xiàng)目這就可以正式啟動(dòng)啦!

          項(xiàng)目啟動(dòng)效果

          4. 整合 Swagger

          只需一步即可!引入 Knife4j Swagger 增加工具包:

          dependencies {
              // Swagger
              implementation 'com.github.xiaoymin:knife4j-openapi3-jakarta-spring-boot-starter:4.5.0'
          }

          讓我們添加一個(gè)接口,測(cè)試下 swagger 的效果:

          package com.app4j.web.knife4j;
          
          import io.swagger.v3.oas.annotations.Operation;
          import io.swagger.v3.oas.annotations.tags.Tag;
          import org.springframework.http.ResponseEntity;
          import org.springframework.web.bind.annotation.PostMapping;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RequestParam;
          import org.springframework.web.bind.annotation.RestController;
          
          /**
           * @author eric.hao
           * @since 2024/07/27
           */
          @RestController
          @RequestMapping("/demo")
          @Tag(name="示例接口")
          public class Knife4jController {
          
              @Operation(summary="向客人問好")
              @PostMapping("/sayHi")
              public ResponseEntity<?> sayHi(@RequestParam(value="name") String name) {
                  return ResponseEntity.ok("Hi:" + name);
              }
          }

          訪問接口文檔的本地地址:http://127.0.0.1:8080/doc.html

          Swagger 界面效果

          重要提示:為什么這次不用配置Docket Bean,就可以看到接口清單?

          Knife4j 自4.0版本,下面的配置在 knife4j-openapi2-spring-boot-starter 中仍然需要如此配置,而在 knife4j-openapi3-spring-boot-starter knife4j-openapi3-jakarta-spring-boot-starter 則不需要!!!

          Knife4j 版本說明

          以上,我們完成了一個(gè)新的網(wǎng)站項(xiàng)目的初始化,并查看網(wǎng)站項(xiàng)目的OpenAPI!

          關(guān)注點(diǎn)贊收藏不迷路!!振鎖會(huì)持續(xù)給大家分享大廠一線的開發(fā)經(jīng)驗(yàn),手把手從0到架構(gòu)設(shè)計(jì)!成為獨(dú)當(dāng)一面的多面手!!

          aven是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型 (Project Object Model),一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周期(Project Lifecycle),一個(gè)依賴管理系統(tǒng)(Dependency Management System),和用來運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。當(dāng)你使用Maven的時(shí)候,你用一個(gè)明確定義的項(xiàng)目對(duì)象模型來描述你的項(xiàng)目,然后Maven可以應(yīng)用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。

          1.創(chuàng)建maven項(xiàng)目

          1.1打開eclipse,在工作區(qū)右擊鼠標(biāo),選擇new,然后選擇Other

          1.2找到maven文件夾,選擇Maven Project,點(diǎn)擊Next繼續(xù)

          1.3繼續(xù)點(diǎn)擊Next

          1.4選中maven-archetype-webapp這一行

          1.5Group Id和Artifact Id都填入RedisWebServer,Package填入com.java,package可以不寫,是它默認(rèn)幫你新建一個(gè)包,不寫沒關(guān)系,點(diǎn)擊Finish

          2.下面新建好的項(xiàng)目結(jié)構(gòu),默認(rèn)有一個(gè)src/main/resources的目錄,我們?cè)傩陆ㄒ粋€(gè)src/main/java的目錄

          3.鼠標(biāo)右擊項(xiàng)目,選中最下面的Properties

          4.看到src/main/java和src/test/java 是missing狀態(tài),把這兩個(gè)Remove掉

          5.點(diǎn)擊create new folder,新建src/main/java和src/test/java

          6.修改web.xml內(nèi)容

          刪除<!DOCTYPE web-app PUBLIC

          "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

          "http://java.sun.com/dtd/web-app_2_3.dtd" >

          添加<?xml version="1.0" encoding="UTF-8" standalone="no"?>

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

          "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd">

          7.設(shè)置Maven啟動(dòng)方式

          8.啟動(dòng)項(xiàng)目,訪問首頁,看看是否成功


          主站蜘蛛池模板: 一区二区中文字幕在线观看| 中文字幕一区二区三区在线观看| 精品一区二区三区免费毛片爱| 国产午夜一区二区在线观看| 日韩人妻一区二区三区蜜桃视频 | 亚洲国产成人久久一区WWW| 人妻激情偷乱视频一区二区三区 | 日韩免费无码视频一区二区三区 | 国产嫖妓一区二区三区无码| 99精品一区二区免费视频| 中文字幕在线观看一区二区| 免费国产在线精品一区| 国产精品盗摄一区二区在线| 无码丰满熟妇浪潮一区二区AV| 日韩中文字幕精品免费一区| 精品亚洲AV无码一区二区| 色偷偷av一区二区三区| 久久久无码一区二区三区| 日本免费一区二区在线观看 | 中文字幕一区二区日产乱码| 日本一区午夜爱爱| 一区国严二区亚洲三区| 亚洲成a人一区二区三区| 国产成人高清精品一区二区三区| 乱中年女人伦av一区二区| 痴汉中文字幕视频一区| 精品人妻少妇一区二区| 亚洲国产综合无码一区| 无码国产伦一区二区三区视频| 亚洲国产一区二区三区青草影视| 日韩精品无码一区二区三区免费| 日韩精品视频一区二区三区| 亚洲大尺度无码无码专线一区 | 性色AV一区二区三区| 亚洲一区在线免费观看| 亚洲一本一道一区二区三区| 高清在线一区二区| 伊人激情AV一区二区三区| 人妻无码第一区二区三区| 久久精品国内一区二区三区| 福利一区二区视频|