美文网首页Maven
(XII)约定优于配置

(XII)约定优于配置

作者: SonyaBaby | 来源:发表于2018-06-25 16:10 被阅读0次

    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插件

    相关文章

      网友评论

        本文标题:(XII)约定优于配置

        本文链接:https://www.haomeiwen.com/subject/hwsyyftx.html