Maven 自定義 archetype


    最近在公司經常要寫一些 storm-job 工程的骨架(archetype)非常相似,為了能夠將大家的工程結構固定下來以及節約建工程的成本,所以給組內自定義了maven-archetype,中途遇到了一些坑。

一、archetype工程

這里記錄一下.首先archetype本身就是一個Maven工程,所以需要按照Maven工程的基本結構構建工程。如圖-1所示

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

                                     圖-1 archetype工程結構

其中 archetype-metadata.xml文件的作用是為了描述,根據此骨架生成的工程應該包含的文件,具體設置如下:

 
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="miuse-job-archetype">
    <fileSets>
        <fileSet filtered="true" encoding="UTF-8">
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.**</include>
            </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/**</include>
            </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
            <directory>src/test/java</directory>
            <includes>
                <include>**/*.**</include>
            </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
            <directory></directory>
            <includes>
                 <include>.**</include>
            </includes>
        </fileSet>
  </fileSets>
</archetype-descriptor>

二、主要遇到的問題有

1. 為了能夠規范工程各個模塊,需要在新工程中包含部分空包(empty package)

   需要在archetype工程根目錄下面的pom.xml (archetype/pom.xml)的文件中,通過增加maven-resource-plugin,並且設置<includeEmptyDirs>true</includeEmptyDirs>將空文件夾打包進工程中。

 
<build>
    <plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.3</version>
          <configuration>
            <includeEmptyDirs>true</includeEmptyDirs>
          </configuration>
      </plugin>
    </plugins>
  </build>

2. 怎么能夠在新建工程中生成 groupID的結構,比如:gourpId: com.company.group.test,應該生成 com/company/group/test 的文件結構,並且在目錄里面的 java文件的 package com.company.group.test;

archetype
|-- pom.xml `-- src `-- main `-- resources |-- META-INF | `-- maven | `--archetype-metadata.xml `-- archetype-resources |-- pom.xml `-- src |-- main | `-- java | `—__packageInPathFormat__(groupId)
                    |          `—__artifactId__ (artifactId)
                    |            `— 包名 
                    `-- test
                        `-- java
                            `-- AppTest.java

其中_ _packageInPathFormat_ _ 為雙下划線,表示gruopId。

3. 包中java 文件的 package 能夠根據groupId生成?


#set( $symbol_pound = '#' ) #set( $symbol_dollar = '$' ) #set( $symbol_escape = '\' ) package ${package}.${artifactId}.app; public class App{ public static void main(String[] args) { System.out.println("Hello Muise Job"); } }

最后只要配置maven-archetype 發布地址,mvn deploy將響應的工程發布即可。

參考文獻:

1. https://maven.apache.org/guides/mini/guide-creating-archetypes.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM