Maven项目模板

1. 什么是ArcheType

或者使用 mvn archetype:generate 命令来快速创建maven项目,也会有很多歌选项,让你选择模板序号。

这里的archetype表示使用哪一个模板来初始化我们的项目∶简单的说archetype是 maven插件,或者说是一个项目模板工具包,它能根据模板创建一个新的项目结构工程。

一个archetype定义了要做的相同类型事情的初始样式或模型。这个名称给我们提供来了一个一致的生成maven工程的方式。archetype会帮助作者给用户创建maven工程模板,并给用户提供生成相关工程模板版本的参数化方法。

  • Maven提供的模板



  • 常用模板



2. 搭建自己的项目模板

2.1 Maven archeType Plugin (base on Java 7)

2.2 Maven archeType Plugin
  • 原型插件有四个直接使用的目标:
    archetype:generate:从原型创建一个Maven项目:要求用户从原型目录中选择一个原型,然后从远程存储库中检索它。检索后,将对其进行处理以创建可正常运行的Maven项目。
    archetype:create-from-project:从现有项目创建原型。
    archetype:crawl:检索在存储库中搜索原型并更新目录。

  • 通过“maven-archetype”包装将三个目标绑定到默认生命周期:
    archetypejar:(绑定到打包阶段)用于构建原型jar工件。
    archetype:integration-test:(绑定到集成测试阶段)用于通过从刚刚构建的原型生成示例项目来执行原型集成测试。
    archetype:update-local-catalog:(绑定到安装阶段)用于更新本地目录。


2.3 实际操作一下

1. 创建一个springboot项目,大致的几个文件如下,具体可以根据自己的需求进行修改。

  • pom.xml


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        3.0.0
         
    
    cn.lazyfennec
    my-springboot-maven-archetype-project
    0.0.1-SNAPSHOT
    my-springboot-maven-archetype-project
    Demo project for my Spring Boot maven archetype
    
        8
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            com.mysql
            mysql-connector-j
            runtime
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    


  • application.yml
spring:
  datasource:
    username: xxxx
    password: xxxx
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/databaseName?serverTimezone=GMT
  • MySpringbootMavenArchetypeProjectApplication
package cn.lazyfennec.myspringbootmavenarchetypeproject;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MySpringbootMavenArchetypeProjectApplication {

    public static void main(String[] args) {
        SpringApplication.run(MySpringbootMavenArchetypeProjectApplication.class, args);
    }

}

2. 项目根目录下执行 mvn clean,如果确认很干净,那么不操作这一步也是可以的,这一步基本不会报错

G:\workspace\my-springboot-maven-archetype-project>mvn clean
[INFO] Scanning for projects...
[INFO]
[INFO] --------< cn.lazyfennec:my-springboot-maven-archetype-project >---------
[INFO] Building my-springboot-maven-archetype-project 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.2.0:clean (default-clean) @ my-springboot-maven-archetype-project ---
[INFO] Deleting G:\workspace\my-springboot-maven-archetype-project\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.919 s
[INFO] Finished at: 2022-12-04T23:54:20+08:00
[INFO] ------------------------------------------------------------------------

3. 项目根目录下执行 mvn archetype:create-from-project,这一步可能会遇到一些错误

  • 没有报错的情况
G:\workspace\my-springboot-maven-archetype-project>mvn archetype:create-from-project
[INFO] Scanning for projects...
[INFO]
[INFO] --------< cn.lazyfennec:my-springboot-maven-archetype-project >---------
[INFO] Building my-springboot-maven-archetype-project 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.2.0:create-from-project (default-cli) > generate-sources @ my-springboot-maven-archetype-project >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.2.0:create-from-project (default-cli) < generate-sources @ my-springboot-maven-archetype-project <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.2.0:create-from-project (default-cli) @ my-springboot-maven-archetype-project ---
[INFO] Setting default groupId: cn.lazyfennec
[INFO] Setting default artifactId: my-springboot-maven-archetype-project
[INFO] Setting default version: 0.0.1-SNAPSHOT
[INFO] Setting default package: cn.lazyfennec.myspringbootmavenarchetypeproject
[WARN] Maven will be executed in interactive mode, but no input stream has been configured for this MavenInvoker instance.
[INFO] Scanning for projects...
[INFO]
[INFO] ---< cn.lazyfennec:my-springboot-maven-archetype-project-archetype >----
[INFO] Building my-springboot-maven-archetype-project-archetype 0.0.1-SNAPSHOT
[INFO] --------------------------[ maven-archetype ]---------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.3.0:resources (default-resources) @ my-springboot-maven-archetype-project-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 81 resources
[INFO]
[INFO] --- maven-resources-plugin:3.3.0:testResources (default-testResources) @ my-springboot-maven-archetype-project-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-archetype-plugin:3.2.0:jar (default-jar) @ my-springboot-maven-archetype-project-archetype ---
[INFO] Building archetype jar: G:\workspace\my-springboot-maven-archetype-project\target\generated-sources\archetype\target\my-springboot-maven-archetype-project-archetype-0.0.1-SNAPSHOT.jar
[INFO] Building jar: G:\workspace\my-springboot-maven-archetype-project\target\generated-sources\archetype\target\my-springboot-maven-archetype-project-archetype-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.536 s
[INFO] Finished at: 2022-12-04T23:57:17+08:00
[INFO] ------------------------------------------------------------------------
[INFO] Archetype project created in G:\workspace\my-springboot-maven-archetype-project\target\generated-sources\archetype
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.550 s
[INFO] Finished at: 2022-12-04T23:57:17+08:00
[INFO] ------------------------------------------------------------------------
  • 有报错的情况,Invoker process ended with result different than 0! -> [Help 1]
G:\workspace\my-springboot-maven-archetype-project>mvn archetype:create-from-project
[INFO] Scanning for projects...
[INFO]
[INFO] --------< cn.lazyfennec:my-springboot-maven-archetype-project >---------
[INFO] Building my-springboot-maven-archetype-project 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.2.0:create-from-project (default-cli) > generate-sources @ my-springboot-maven-archetype-project >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.2.0:create-from-project (default-cli) < generate-sources @ my-springboot-maven-archetype-project <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.2.0:create-from-project (default-cli) @ my-springboot-maven-archetype-project ---
[INFO] Setting default groupId: cn.lazyfennec
[INFO] Setting default artifactId: my-springboot-maven-archetype-project
[INFO] Setting default version: 0.0.1-SNAPSHOT
[INFO] Setting default package: cn.lazyfennec.myspringbootmavenarchetypeproject
[WARN] Maven will be executed in interactive mode, but no input stream has been configured for this MavenInvoker instance.
[ERROR] Error executing Maven.
[ERROR] The specified user settings file does not exist: C:\Users\lazyf\.m2\settings.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.845 s
[INFO] Finished at: 2022-12-04T23:58:25+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.2.0:create-from-project (default-cli) on project my-springboot-maven-archetype-project: Invoker process ended with result dif
ferent than 0! -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

这个错误产生后,我们看报错的提示,最后几行有描述可以通过增加参数 -X 查看debug的信息,于是我们就加上

mvn archetype:create-from-project -X

最后我们查看打印的日志,可以看到以下信息,所以将其他地方的settings.xml 拷贝过去就可以了


同理,如果遇到其他的错误,也可以使用这个方法得到一些相关的信息,然后跟着去进行操作就好了。

执行上边的命令后,我们可以看到target目录下生成了一些东西,如下图


4. 先进入到 target\generated-sources\archetype,然后执行 mvn install

cd target/generated-sources/archetype
mvn install

这时候会将jar包等内容生成到settings.conf 中指定的maven_repository目录中,如我这里就是D:\maven\maven_repository\cn\lazyfennec\my-springboot-maven-archetype-project-archetype\0.0.1-SNAPSHOT\my-springboot-maven-archetype-project-archetype-0.0.1-SNAPSHOT.jar
此外,目录maven_repository 中还会生成一个 archetype-catalog.xml,大致内容如下



  
    
    
      cn.lazyfennec
      my-springboot-maven-archetype-project-archetype
      0.0.1-SNAPSHOT
      Demo project for my Spring Boot maven archetype
    
  

这个文件存储了本地仓库模板的一些信息

5. 执行 mvn archetype:crawl
这个指令的意思就是对整个仓库进行扫描,然后在本地根目录生成 archetype-catalog.xml 骨架配置文件,但是可能很费时间,扫描结束后会根据情况生成archetype-catalog.xml 新的内容。

6. 使用archetype模板

  • 命令方式
    执行mvn archetype:generate -DarchetypeCatalog=local,这个指令会让你从本地的archetype模板中创建项目。然后会让你选择模板序号和groupId、artifactId、version 和 package 信息。

  • IDEA直接使用
    这里直接给图片吧






剩下的操作按照一般创建项目的顺序即可。等待加载完成后,除了一些配置,其他的内容基本和模板项目一致。


2.4 对于一个项目里边多个modules的情况

对于一个项目里边多个modules的情况,其实创建项目模板也是一样的步骤,只是选择目录要选最外层的目录下操作,其他的一致。


3. 拓展

3.1 maven archetype项目结构





3.2 发布模板

发布的具体内容,待下个文章更新,因为某个软件下载不了,需要缓一缓


如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~

你可能感兴趣的:(Maven项目模板)