Maven的默認POM文件,若是POM文件沒有指定父POM文件,那麼配置都是集成Super POMjava
POM文件的最低須要的配置元素:web
Maven項目的徹底限定名:
groupId:artifactId:versionapache
packaging元素默認是JAR,還有其餘選項是WAR,EAR等等
以前在Super POM一節談到指定了父POM的繼承指定父POM的配置,實現以下:app
. |--my-app | |-- my-module | | `-- pom.xml `-- pom.xml
my-app的POM <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> </project>
my-module的POM <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-module</artifactId> <version>1</version> </project>
修改my-module的POM,便可實現講my-app做爲一個父POM繼承給my-module,實現以下:webapp
my-module的POM <project> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-module</artifactId> <version>1</version> </project>
若是my-app不是做爲my-module的父目錄,以下:maven
. |-- my-module | `-- pom.xml `-- my-app `-- pom.xml
須要配置<relativePath>屬性,配置相對my-module的相對路徑以下:工具
<project> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <relativePath>../parent/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>my-module</artifactId> </project>
若是咱們想要對一些模塊都須要執行相同的命令,可是不想進入每個模塊下進行執行命令,可使用Aggregation.測試
目錄結構ui
. |-- my-module | `-- pom.xml `-- pom.xml
將my-module模塊聚合到my-app,修改my-app的POM文件以下:url
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <packaging>pom</packaging> <modules> <module>my-module</module> </modules> </project>
- 有些命令不能同時執行
- Inheritance和Aggregation能夠混合使用
Maven的設計哲學就是不要重複本身,因此當一些配置是相同的時候,咱們可使用本身定義的變量和預約義好的變量.
好比咱們要使用projcet的version給其餘配置項,咱們能夠如此使用
<version>${project.version}</version>
咱們也可使用本身定義的變量,好比咱們定義了一個mavenVersion變量,咱們能夠如此使用
<project> ... <properties> <mavenVersion>2.1</mavenVersion> </properties> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-artifact</artifactId> <version>${mavenVersion}</version> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-project</artifactId> <version>${mavenVersion}</version> </dependency> </dependencies> ... </project>
咱們在思考Maven是什麼的時候,其中有一個理解就是Maven是一套規範,那麼這些規範體如今哪裏呢,體如今他的項目目錄的結構
目錄 | 解釋 |
---|---|
src/main/java | Application/Library sources |
src/main/resources | Application/Library resources |
src/main/filters | Resource filter files |
src/main/webapp | Web application sources |
src/test/java | Test sources |
src/test/resources | Test resources |
src/test/filters | Test resource filter files |
src/it | Integration Tests (primarily for plugins) |
src/assembly | Assembly descriptors |
src/site | Site |
LICENSE.txt | Project's license |
NOTICE.txt Notices | and attributions required by libraries that the project depends on |
README.txt | Project's readme |
命令:
mvn compile
命令:
mvn test-compile
命令:
mvn test
咱們執行編譯的或者測試的時候會將須要依賴下載到本地倉庫(通常在${user.home}/.m2/repository)中,供咱們的項目使用。那麼咱們是否是也能夠講本身的項目給其餘項目使用呢?
命令:
mvn packaging
該命令會將打包好的文件(若是咱們在POM文件設置packaging是jar,那就打成jar包,以此類推)放在目錄${basedir}/target
命令:
mvn install
surefire插件會查找項目中特定命名約定的文件
默認排除:
命令:
mvn clean
只將${basedir}/target裏面的文件清除
命令:
<dependencies> ... <dependency> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies>
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>