IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Maven Archetype 开发 -> 正文阅读

[Java知识库]Maven Archetype 开发

一、简介

原型提供了一种很好的方式,可以以与您的项目或组织采用的最佳实践一致的方式快速启用开发人员。在 Maven 项目中,我们使用原型来尝试让我们的用户尽快启动并运行,方法是提供一个示例项目来演示 Maven 的许多特性,同时向新用户介绍 Maven 采用的最佳实践。在几秒钟内,一个新用户就可以拥有一个工作的 Maven 项目,作为一个跳板来研究 Maven 中的更多功能。更多

二、快速入门

2.1、项目创建

通过maven官方提供的用来生成Archetype模板项目的Archetype (了解结构可以手动创建)

mvn archetype:generate -DgroupId=[your project's group id] -DartifactId=[your project's artifact id] -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-archetype

2.2、项目结构

archetype
│  pom.xml
└─src
    ├─main
    │  └─resources
    │      ├─archetype-resources
    │      │  │  pom.xml
    │      │  │
    │      │  └─src
    │      │      ├─main
    │      │      │  └─java
    │      │      │          App.java
    │      │      │
    │      │      └─test
    │      │          └─java
    │      │                  AppTest.java
    │      │
    │      └─META-INF
    │          └─maven
    │                  archetype-metadata.xml
    │
    └─test
        └─resources
            └─projects
                └─it-basic
                        archetype.properties
                        goal.txt

Archetype模板项目同样是一个maven项目,archetype模板项目必须要包含以下文件:

  • pom.xml
  • archetype-metadata.xml
  • archetype-resources/
  • archetype模板项目的pom.xml跟普通maven项目一样,也需要设置groupId、artifactId、version、packaging等元素。

2.3 项目POM

<?xml version="1.0" encoding="UTF-8"?>

<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>cn.meshed.archetype</groupId>
    <artifactId>spring-boot-archetype</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>maven-archetype</packaging>

    <name>Archetype - spring-boot-archetype</name>

    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <build>
        <extensions>
            <extension>
                <groupId>org.apache.maven.archetype</groupId>
                <artifactId>archetype-packaging</artifactId>
                <version>3.0.1</version>
            </extension>
        </extensions>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-archetype-plugin</artifactId>
                    <version>3.0.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

2.4 Archetype描述文件

META-INF/maven/archetype-metadata.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<archetype-descriptor xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  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="${artifactId}">

  <fileSets>
    <fileSet filtered="true" packaged="true">
      <directory>src/main/java</directory>
    </fileSet>
    <fileSet filtered="true" packaged="true">
      <directory>src/test/java</directory>
    </fileSet>
  </fileSets>
</archetype-descriptor>

fileSets是该文件核心元素,fileSets可以包含一个或多个fileSets,其中directory目录元素最终会指向archetype-resources/目录下的子目录。

fileSet两个属性filtered和packaged。

  • filtered表示是否对directory指定的目录中的文件应用属性替换,比如src/main/java目录下的App.java这个文件,其中使用了String
    name =“${X}”;这样一段代码,然后开发者通过命令或者eclipse从该archetype模板项目导出骨架项目的时候会输入X的具体替换内容,最终导出后name的值就是你所替换的内容。

  • packaged表示是否将该目录下的内容放到生成项目的包路径下。比如开发者从该archetype模板项目导出骨架项目的时候,设置package=com.start.archetype,如果package=true,那么最终生成的项目目录为src/main/java/com/start/archetype/App.java,反之目录为src/main/java/App.java。一般对于java文件设置为package=true,对于properties等配置文件设置为package=false。

  • 参考Archetype-Descriptor教程

代码模板

package $package;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

$package 会替换成创建的项目具体包

实战

代码见 仓库 (一个一个粘贴太麻烦了)

基本项目

仓库中 springboot-demo 是一个最基础的项目
根据上面的基础例子,尝试对demo项目做成模板: spring-boot-archetype

导出骨架项目

格式

mvn archetype:generate                                  \
  -DarchetypeGroupId=<archetype-groupId>                \
  -DarchetypeArtifactId=<archetype-artifactId>          \
  -DarchetypeVersion=<archetype-version>                \
  -DgroupId=<my.groupid>                                \
  -DartifactId=<my-artifactId>

例如

mvn archetype:generate                                      \
  -DarchetypeGroupId=cn.meshed.archetype      \
  -DarchetypeArtifactId=spring-boot-archetype   \
  -DarchetypeVersion=1.0-SNAPSHOT                  \
  -DgroupId=cn.meshed.springboot                      \
  -DartifactId=springboot		                    \
  -Dversion=1.0-SNAPSHOT

多模块项目

如果不满足普通项目,多模块可以参考此案例
多模块demo:spring-multi-module-demo
项目:spring-multi-module-archetype

mvn archetype:generate                                      \
  -DarchetypeGroupId=cn.meshed.archetype      \
  -DarchetypeArtifactId=spring-multi-module-archetype   \
  -DarchetypeVersion=1.0-SNAPSHOT                  \
  -DgroupId=cn.meshed.springboot                      \
  -DartifactId=multi-module-test		                    \
  -Dversion=1.0-SNAPSHOT

多模块参考: cola-archetypes

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:42:45  更:2022-09-24 20:46:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:15:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码