雖然 Gradle 勢頭很猛,可是 Maven 依然是 Java 項目構建的優先選擇,本文簡要介紹一些 Maven 工程實踐前端
若是工程比較複雜,或者預期後續會變的比較複雜,能夠將工程分紅多個模塊,經常使用的分模塊的方法: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 能夠指定 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 用來排除一些你不想在持續集成中運行 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>
一般一個 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 用於管理依賴,一個應用場景是將依賴的 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>