首页 » Java程序员修炼之道 » Java程序员修炼之道全文在线阅读

《Java程序员修炼之道》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中的另一个关键部分,依赖管理。