在Maven專案中,一定可以看到一個pom.xml
的檔案,通常在專案根目錄的位置。
pom.xml
的POM是Project Object Model(專案模型)的縮寫,為Maven專案的必要文件,其內容包含專案的描述,依賴,使用的plugin,及Maven該如何建置專案的等配置說明。
簡單來說,Maven透過讀取pom.xml
的設定來建置專案。
一個最簡單的pom.xml
內容如下。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.abc</groupId>
<artifactId>banana</artifactId>
<version>0.0.1</version>
</project>
<project>
是pom.xml
的root element。
<modelVersion>
代表這個POM所使用的模型版本。
<groupId>
及<artifactId>
代表了專案的artifact的唯一名稱(fully qualified artifact name),也就是com.abc.banana。
而每個Maven專案的pom.xml
都繼承Super POM,其包含一些預設的設定,例如專案建置(build)的目錄位置,原始碼來源目錄位置等。
Super POM是Maven工具包的一部分,也就是你在安裝Maven時同時就有了Super POM,而在新建Maven專案時,其專案的pom.xml
便會自動繼承Super POM的設定。
Super POM的內容如下(Maven 3.5.4)。
<?xml version="1.0" encoding="UTF-8"?>
<!-- START SNIPPET: superpom -->
<project>
<modelVersion>4.0.0</modelVersion>
<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>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
<build>
<directory>${project.basedir}/target</directory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
<pluginManagement>
<!-- NOTE: These plugins will be removed from future versions of the super POM -->
<!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) -->
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<reporting>
<outputDirectory>${project.build.directory}/site</outputDirectory>
</reporting>
<profiles>
<!-- NOTE: The release profile will be removed from future versions of the super POM -->
<profile>
<id>release-profile</id>
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<inherited>true</inherited>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<inherited>true</inherited>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<inherited>true</inherited>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<updateReleaseInfo>true</updateReleaseInfo>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
<!-- END SNIPPET: superpom -->
你可以在從官網下載回來的Maven中的lib/maven-model-builder-3.x.x.jar
中的org/apache/maven/model/pom.xml
找到Super POM
如果是Eclipse的話因為其內建了Maven(m2e),所以Super POM的位置在Eclipse安裝目錄下的plugins/org.eclipse.m2e.maven.runtime_x.x.x.20xxxxxx-xxxx/jars/maven-model-builder-3.x.x.jar
中的org/apache/maven/model/pom.xml
。
從上面的Super POM可以看到內容定義了預設的remote central repository及remote plugin central repository的位置,建置時各目錄位置,預設的plugin等。這也說明了為什麼我們只要在專案的pom.xml
加入dependency後Maven便會開始下載jar檔至專案的函式庫(Libraries)中,以及在Maven build時Maven知道要去src/test/java
編譯測試程式
而Super POM與專案的POM合併即為Effective POM,在Eclipse開啟pom.xml
時,我們可以看到編輯區下方有個Effective POM標籤,點選即可以看到Effective POM的內容。
參考:
沒有留言:
張貼留言