名著阅读 > Java程序员修炼之道 > E.1 构建配置 >

E.1 构建配置

构建部分(<build>)包含一些插件及其配置信息,需要靠它们来执行Maven构建周期目标。对于大多数项目来说,这一部分通常都相当短,因为一般用默认插件的默认设置就够了。但对于java7developer项目而言,<build>部分包含了几个覆盖了默认设置的插件。我们之所以这样做,是为了让java7developer项目可以:

  • 构建Java 7代码;
  • 构建Scala和Groovy代码;
  • 运行Java、Scala和Groovy测试;
  • 提供Checkstyle和FindBugs代码指标报告。

如果你的构建中还有更多需要配置的地方,可以在http://maven.apache.org/plugins/index.html找到完整的插件列表。

代码清单E-1是java7developer项目的构建配置。

代码清单E-1 POM:构建信息

<build>
   <plugins>

      <plugin> 
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>2.3.2</version> //❶指明要用的插件
         <configuration>
            <source>1.7</source>
            <target>1.7</target> //❷编译Java 7代码
            <showDeprecation>true</showDeprecation>
            <showWarnings>true</showWarnings>
            <fork>true</fork> //❸设置编译器选项
            <executable>${jdk.javac.fullpath}</executable> //❹ 设置javac的路径
         </configuration>
      </plugin>

      <plugin>
         <groupId>org.scala-tools</groupId>
         <artifactId>maven-scala-plugin</artifactId>
         <version>2.14.1</version>
         <executions>
            <execution>
               <goals>
                  <goal>compile</goal>
                  <goal>testCompile</goal> //❺强制Scala编译
               </goals>
            </execution>
         </executions>
         <configuration>
            <scalaVersion>2.9.0</scalaVersion>
         </configuration>
      </plugin>

      <plugin>
         <groupId>org.codehaus.gmaven</groupId>
         <artifactId>gmaven-plugin</artifactId>
         <version>1.3</version>
         <dependencies>
            <dependency>
               <groupId>org.codehaus.gmaven.runtime</groupId>
               <artifactId>gmaven-runtime-1.7</artifactId>
               <version>1.3</version>
            </dependency>
         </dependencies>
         <executions>
            <execution>
               <configuration>
                  <providerSelection>1.7</providerSelection>
               </configuration>
               <goals>
                  <goal>generateStubs</goal>
                  <goal>compile</goal>
                  <goal>generateTestStubs</goal>
                  <goal>testCompile</goal>
               </goals>
            </execution>
         </executions>
      </plugin>

      <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>properties-maven-plugin</artifactId>
         <version>1.0-alpha-2</version>
         <executions>
            <execution>
               <phase>initialize</phase>
               <goals>
                  <goal>read-project-properties</goal>
               </goals>
               <configuration>
                  <files>
                     <file>${basedir}/build.properties</file>
                  </files>
               </configuration>
            </execution>
         </executions>
      </plugin>
   </plugins>

   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.9</version>
      <configuration>
         <excludes> 
            <exclude>  ﹃❻排除测试
            com/java7developer/chapter11/listing_11_2 TicketRevenueTest.java</exclude>
            <exclude>com/java7developer/chapter11/listing_11_7 TicketTest.java
            </exclude> ﹄❻排除测试
            ...
         </excludes>
      </configuration>
   </plugin>

   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-checkstyle-plugin</artifactId>
      <version>2.6</version>
      <configuration>
         <includeTestSourceDirectory>
          true
         </includeTestSourceDirectory> //在测试上运行Checkstyle
      </configuration>
   </plugin>

   <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>findbugs-maven-plugin</artifactId>
      <version>2.3.2</version>
      <configuration>
         <findbugsXmlOutput>true</findbugsXmlOutput> //生成FindBugs报告
         <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
         <xmlOutput>true</xmlOutput>
      </configuration>
   </plugin>
</build>
 

因为你要将编译Java 1.5代码的默认行为变为编译Java 1.7❷,所以需要指明正在使用(特定版本)的Compiler(编译器)插件❶。

因为已经打破了惯例,所以最好加上几个其他的编译器警告选项❸。还可以指明Java 7装在哪里❹。要想让Maven得到javac的位置,只要将与操作系统对应的sample_build.properties另存为build.properties,并修改属性jdk.javac.fullpath的值即可。

为了使用Scala插件,需要确保compiletestCompile目标运行时Scala插件能够执行❺1。用Surefire插件可以对测试进行配置。在这个项目的配置中,排除了几个故意失败的测试⑥(你会记起来自第11章的两个TDD测试)。

1 希望这个插件的后续版本能自动挂到这些目标上。

我们已经讨论过构建部分了,现在让我们转入POM中的另一个关键部分,依赖管理。