Convention Over Configuration
Maven提倡“约定优于配置”,这是Maven最核心的设计理念之一。使用约定可以大量减少配置。
我们需要遵循Maven的约定:
- 源码目录为 src/main/java/
- 编译输出目录为 target/classes
- 打包方式为 jar
- 包输出目录为target/
遵循约定虽然损失了一定的灵活性,用户不能随意安排目录结构,但是可以减少配置。同时帮助用户遵守构建标准。
自定义约定
<project>
<groupId>com.play.myMaven</groupId>
<artifactId>hello-maven-aggregator</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<build>
<sourceDirectory>src/java</sourceDirectory>
</build>
</project>
这样源码目录就成了src/java而不是默认的src/main/java
超级POM
找到~\lib\maven-model-builder-3.3.9\org\apache\maven\model中的pom-4.0.0.xml
仓库定义
<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>
...
</build>
依次定义了项目的主输出目录、主代码输出目录、最终构件的名称格式、测试代码输出目录、主源码目录、脚本源码目录、测试源码目录、主资源目录和测试资源目录。
核心插件设定版本
<pluginManagement>
<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>
Maven设定核心插件是为了防止由于版本变化而造成构建不稳定。
更多关于插件配置,飞机票→Maven插件
网友评论