Maven 工程實踐

前言

雖然 Gradle 勢頭很猛,可是 Maven 依然是 Java 項目構建的優先選擇,本文簡要介紹一些 Maven 工程實踐前端

多模塊(multiple module)

若是工程比較複雜,或者預期後續會變的比較複雜,能夠將工程分紅多個模塊,經常使用的分模塊的方法:java

  • core,核心代碼)web

  • util/common,工具shell

  • service,服務apache

  • web/front,web 前端json

在 root(頂層)pom 文件中聲明工程包含的各個模塊maven

<project>
    ...
    <packaging>pom</packaging>

    <modules>
        <module>core</module>
        <module>service</module>
        <module>util</module>
        <module>web</module>
    </modules>
</project>

在子模塊 pom 文件中聲明 parent pom工具

<project>
    ...
    <parent>
        <groupId>com.aachuxing.gov.report</groupId>
        <artifactId>...</artifactId>
        <version>1.0</version>
    </parent>
</project>

插件

使用 Maven 離不開各類各樣的插件,簡單介紹一下經常使用的插件,詳細使用說明能夠參考官方文檔,或者直接 google/baidu,在聲明插件的時候推薦:測試

  • 將 屬性值(jdk.version)定義在 properties 標籤中ui

  • 將 build 標籤聲明在 root pom 中

maven-compiler-plugin

maven-compiler-plugin 能夠指定 jdk 版本,推薦設置 jdk8 以上版本

<project>
    ...
    <properties>
        <jdk.version>1.8</jdk.version>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>${jdk.version}</source>
                        <target>${jdk.version}</target>
                        <compilerVersion>${jdk.version}</compilerVersion>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

maven-surefire-plugin

maven-surefire-plugin 用來排除一些你不想在持續集成中運行 test case,它們可能僅僅是你用來測試你的代碼,好比測試 dao 中 SQL 書寫是否有問題

<project>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <excludes>
                        <exclude>**/XXXTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

maven-assembly-plugin

一般一個 Java 工程除了 jar 包以外還有各類各樣的文件:shell 腳本,properties(屬性)文件,數據文件(json, xml),使用 maven-assembly-plugin 能夠對工程打包部署作深度定製

<project>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/assembly1.xml</descriptor>
                        <descriptor>src/main/assembly/assembly2.xml</descriptor>
                        <descriptor>src/main/assembly/assembly3.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

assembly.xml 配置文件用於配置具體的打包過程,在 descriptors 標籤中能夠指定多個配置文件,實現一套代碼打出多個 "渠道包"

下面是一個 assembly.xml 文件示例:

<assembly>
    <id>${id}</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>src/main/assembly/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <includes>
                <include>startup.sh</include>
                <include>shutdown.sh</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/classes</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>config.properties</include>
                <include>log4j2.xml</include>
            </includes>
            <fileMode>0644</fileMode>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
</assembly>
  • formats,經過後綴名指定打包文件格式,tar.gz, zip, war .etc

  • fileSets,指定哪些文件被打到包裏頭

maven-dependency-plugin

maven-dependency-plugin 用於管理依賴,一個應用場景是將依賴的 jar 包解開合併到工程中

<project>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>com.compony.xxx</groupId>
                                    <artifactId>yyy</artifactId>
                                </artifactItem>
                            </artifactItems>
                            <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

總結

相關文章
相關標籤/搜索