Создание каркаса Java для унификации стиля структуры командного проекта.

Java

Хотя maven предоставил скелеты проекта, такие как maven-archetype-webapp и maven-archetype-quickstart, чтобы помочь нам быстро построить архитектуру проекта, архитектура проекта по умолчанию, инициализированная архетипом, не может удовлетворить потребности разработки.

Диаграмма структуры проекта, созданная с помощью пользовательского типа арки

Чтобы стимулировать интерес к чтению, сначала поместите диаграмму структуры проекта, которая использует пользовательский архетип для создания проекта.

В основном классыarchetypeПоколение, чтобы позволить вам учиться действительно исчерпан

что такое архетип

Его можно просто понимать как класс инструмента шаблона, черезarchetypeМы можем быстро сгенерировать базовую структуру проекта. Например, мы используемideaСоздаватьmaven webпроект, часто выбираютmaven-archetype-webappшаблон для инициализации проекта, используйтеmaven-archetype-webappСозданный проект включает в себяwebappкаталог, который содержитwebфайл конфигурации

Состав архетипов

Чтобы написать обычайarchetype, В первую очередь нужно знать архетип композиции. Архетип состоит из четырех частей:

  • prototype filesФайл прототипа
    родыsrc/main/resources/archetype-resourceПод содержанием.prototype filesПод файлом прототипа можно понимать подмодуль в мультимодуле или исходный файл в одномодульном проекте [то есть файл src]. Эти файлы прототипов используют соответствующиеarchetypeгенерируется при сборке проекта
  • archetype-metadata.xml
    родыsrc/main/resources/META-INF/maven/Под содержанием. Файлы прототипов и их использование в основном перечислены в этом файле конфигурации.archetypeПараметры, необходимые для создания шаблона проекта
  • prototype pom
    родыsrc/main/resources/archetype-resourcesПод содержанием. этоpomarchetypeСоздайте шаблон проекта, если проект представляет собой один модуль, он зависит от управления всем проектом; если это многомодульный проект,pomВсегдаpomфайл, который определяет подмодули проекта и управляет зависимостями подмодулей и т. д., подмодулиpomОпределенный в подмодуле файл pom подмодуля управляет только зависимостями подмодуля.
  • archetype pom
    на заказarchetypeв корневом каталоге проекта. Этоarchetypeинженерный проектpomфайла, в нем вообще ничего нет, и он не появится вarchetypeВ созданном шаблонном проекте

Структурное описание Супермена [Custom Arche PETYPE]

  • supermanСхема структуры проекта
    содержитarchetypeЧетыре компонента, дваpomфайл, аarchtype-metadataФайл и пять файлов прототипа [__rootArtifactId__-*],в__rootArtifactId__Он будет заменен переданным значением при создании шаблона проекта.
  • файл конфигурации метаданных archtype
    • 1. Определите использованиеarchetypeПараметры, которые необходимо передавать для генерации проекта шаблона
      <!--需要输入的属性-->
          <requiredProperties>
              <requiredProperty key="groupId">
                  <!--默认的groupId-->
                  <defaultValue>com.h2t.test</defaultValue>
              </requiredProperty>
              <requiredProperty key="artifactId">
                  <!--默认的artifactId-->
                  <defaultValue>demo</defaultValue>
              </requiredProperty>
              <requiredProperty key="package">
                  <!--默认的包名和groupId一样-->
                  <defaultValue>${groupId}</defaultValue>
              </requiredProperty>
          </requiredProperties>
      
      ${}Переменные идентифицируются командной строкой Maven, переданной в
    • 2. Определите файл прототипа
          <module id="${rootArtifactId}-web" name="${rootArtifactId}-web" dir="__rootArtifactId__-web">
                  <fileSets>
                      <fileSet filtered="true" encoding="UTF-8" packaged="true">
                          <directory>src/main/java</directory>
                          <includes>
                              <include>**/*.*</include>
                          </includes>
                      </fileSet>
                      <fileSet filtered="true" encoding="UTF-8" packaged="true">
                          <directory>src/test/java</directory>
                          <includes>
                              <include>**/*.*</include>
                          </includes>
                      </fileSet>
                      <fileSet encoding="UTF-8">
                          <directory>src/main/resources</directory>
                          <includes>
                              <include>**/*.*</include>
                          </includes>
                      </fileSet>
                      <fileSet encoding="UTF-8">
                          <directory>src/test/resources</directory>
                          <includes>
                              <include>**/*.*</include>
                          </includes>
                      </fileSet>
                  </fileSets>
              </module>
      
      moduleВведение атрибута:id: проект подмодуляartifactId dir: Исходный файл проекта подмодуля находится вarchetype-resourcesсоответствующийdirectory name: Имя подмодуля.
  • pom-файл прототипа
    • 1. Определяет пять подмодулей
          <!--项目子模块-->
          <modules>
              <module>${rootArtifactId}-common</module>
              <module>${rootArtifactId}-dao</module>
              <module>${rootArtifactId}-service</module>
              <module>${rootArtifactId}-web</module>
              <module>${rootArtifactId}-model</module>
          </modules>
      
    • Унифицированное управление версиями зависимостей подмодулей
      <dependencyManagement>
                  <!--modules-->
                  <dependency>
                      <groupId>${groupId}</groupId>
                      <artifactId>${rootArtifactId}-common</artifactId>
                      <version>${version}</version>
                  </dependency>
      
                  <dependency>
                      <groupId>${groupId}</groupId>
                      <artifactId>${rootArtifactId}-dao</artifactId>
                      <version>${version}</version>
                  </dependency>
      
                  <dependency>
                      <groupId>${groupId}</groupId>
                      <artifactId>${rootArtifactId}-service</artifactId>
                      <version>${version}</version>
                  </dependency>
      
                  <dependency>
                      <groupId>${groupId}</groupId>
                      <artifactId>${rootArtifactId}-model</artifactId>
                      <version>${version}</version>
                  </dependency>
              </dependencies>
          </dependencyManagement>
      
      Все зависимости, требуемые подмодулями, определены в этомpom, не требуется, когда подмодули используют зависимости<version>Этикетка
  • Файлы прототипа указаны как веб-модули.
    Это простой проект maven, который пишет класс, использующий архетип для создания шаблонных проектов.

Прикрепил:Superman Archetype код


Технический выбор супменского архетипа

  • DB
    MySQL
  • ORM
    MyBatisPlus
  • Framework
    SpringBoot

DONE

  • Интеграция фреймворков SpringBoot и MyBatisPlus
  • Унифицированная обработка исключений
  • Единая инкапсуляция результатов
  • Конфигурация журналов log4j
  • MybatisPlus
    • Генератор кода
    • Пагинация
    • Надгробие

Быстрый старт [руководство по использованию архетипа супермена]

  • 1. Загрузите исходный код

    git clone https://github.com/TiantianUpup/superman.git
    
  • 2. Откройте проект супермена и установите его на локальный склад.
    Переключитесь на ветку 20190815-V2UPDate перед запуском команды, главная ветвь была нарушена мной [что позор! ! ! 】
    Выполните следующую команду

    mvn clean install
    
  • 3. Инициализируйте проект с помощью пользовательского архетипа

    mvn archetype:generate 
    -DgroupId=com.h2t.test 
    -DartifactId=superman-demo 
    -Dversion=1.0.0-SNAPSHOT 
    -DarchetypeGroupId=com.h2t.study 
    -DarchetypeArtifactId=superman -DarchetypeVersion=0.0.1-SNAPSHOT -X -DarchetypeCatalog=local
    

    Параметр Описание
    -DgroupIdИдентификатор группы, такой же, как идентификатор группы имени пакета проекта по умолчанию.
    DartifactId: уникальный идентификатор проекта, т. е. название проекта.
    -DarchetypeGroupId: групповой идентификатор супермена, значение изменять не нужно.
    -DarchetypeArtifactId: ArtifactId супермена, значение менять не нужно

  • 4. изменить файлы конфигурации в папке ресурсов, а файл ресурсов пометить Resources Root

    Эта папкаapplication.properties,logback.properties,logback-spring.xmlтри файла конфигурации

    • application.propertiesМодификация конфигурационных файловapplication.propertiesв основномSpring,MyBatisPlusИ информационная база данных конфигурации

      spring.datasource.url=jdbc:mysql://localhost:3306/your_database?characterEncoding=UTF8&serverTimezone=UTC
      spring.datasource.username=root
      spring.datasource.password=your password
      

      Измените базу данных, пароль, имя пользователя по умолчаниюroot

      mybatis-plus.mapper-locations=classpath*:/mapper/*.xml  
      # mybatis-plus.type-aliases-package=
      

      уточнитьMybatisPlusПакет имен классов сущностей, т.е.modelмодульныйpoИмя пакета слоя, по умолчаниюMybatiPlusизmapperФайл сохраненresourceвнизmapperВ папке вы можете изменить его самостоятельно

    • logback.propertiesМодификация конфигурационных файловlogback.propertiesОпределенныйerrorжурнал уровня иinfoАдрес хранения лога уровня

      LOG_ERROR_HOME=  
      LOG_INFO_HOME=
      
    • logback-spring.xmlМодификация конфигурационных файловlogback-spring.xmlВ основном определение правил вывода журнала, если этоwindowsСистему не нужно модифицировать, еслиlinux osилиmac os, вам нужно изменить адрес хранения журнала

      <fileNamePattern>${LOG_ERROR_HOME}//%d.log</fileNamePattern>
      

      будет//превратиться в/

  • Использование генератора кода для генерации 5controller,service,dao,poкод слоя Класс генератора кода находится по адресуserviceпод модульgeneratorПод пакетом нужно только инициализировать несколько значений полей и запустить для генерации соответствующего кода. Перед запуском сначала создайтеmp-generator-outputпапка, название папки иOUTPUT_DIRЗначение поля соответствует

    • PACKAGE_NAME
      Имя пакета сгенерированного кода такое же, как и имя пакета проекта, при копировании прошлого кода возникнут небольшие проблемы. -OUTPUT_DIRСгенерированный код сохраняет адрес файла, который по умолчанию сохраняется в проекте.mp-generator-outputВ папке вы можете изменить ее на собственный адрес сохранения.
    • AUTHOR
      Имя автора в заметке
    • DRIVER_NAME
      управляемый базой данных
    • HOST
      номер хоста базы данных
    • PORT
      порт базы данных
    • DATABASE
      имя базы данных
    • USERNAME
      имя пользователя базы данных
    • PASSWORD
      пароль базы данных
  • 6. Переместите сгенерированный код в соответствующий пакет соответствующего модуля.

    • controllerпапка
      соответствующий классу сущностиController, В категории каталога дляwebпод модульcontrollerпод пакетом

    • mapperпапка соответствующий классу сущностиDAOслой, каталог содержитxmlфайл и класс интерфейса соответствующей сущности, будутxml文перейти кdaoмодульresourceвнизmapperпапка, вам нужно создать ее самостоятельноmapperпапку, переместите интерфейс вdaoпод модульmapperупаковать и добавить в класс интерфейса@MapperАннотация, вам нужно создать его самостоятельноmapperСумка. Также отметьте папку ресурсов какResources root

    • serviceСоответствует классу сущности интерфейса

      • implКласс сущности интерфейса, соответствующий классу

      будетserviceИнтерфейс под каталогом перемещен вserviceпод модульserviceпод пакетом,implПереместите класс в каталог, чтобыserviceпод модульservice.implпод пакетом

    • po папка Переместите классы в этом каталоге вmodelпод модульpoВ пакете и изменить отношения наследования, единое наследованиеBasePOкласс, потому чтоBasePOкласс содержитid,gmtCreate,gmtModified,deletedЭти базовые поля базы данных необходимо вручную удалить из сгенерированного класса сущностей. автоматически генерируется одновременноpoкласс отсутствует@TableName,@TableFieldАннотации необходимо добавлять вручную. Узнайте, как использовать аннотацииBasePOсвоего рода

  • 7. МодификацияwebмодульaspectКруговые уведомления под пакетами

    @Around("execution(* yourpackage.controller..*(..))")
    

    Этот аспект в основном используется для перехвата результата, возвращаемого уровнем контроллера, и инкапсуляции его в унифицированный результат для возврата.

  • 8 Запустите проект
    webпод модульRunnerКласс является классом запуска, запустите этот класс для запуска, порт по умолчанию — 8081.


Прикрепил:Супермен архетип генерирует демонстрационный адрес проекта

欢迎fork与star[划重点],由于开发经验有限,有些地方可能考虑不周,欢迎提bug。 ИarchetypeОпределены только некоторые основные функции, и запросы приветствуются.