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

《Java程序员修炼之道》E.2 依赖项管理

关灯直达底部

大多数Java项目的依赖项清单都很长,java7developer也不例外。Maven可以帮你管理这些依赖项,它在Maven Central Repository中存了数量庞大的第三方类库。重要的是,这些第三方类库都有它们自己的pom.xml文件,其中又声明了它们各自的依赖项,Maven由此可以推断出你还需要哪些类库并下载它们。

最初会用到两个主要作用域是compiletest2。这跟把JAR文件放到CLASSPATH中编译代码然后运行测试效果是完全一样的。

2 J2EE/JEE项目中通常还会有些声明为runtime作用域的依赖项。

代码清单E-2为java7developer项目pom文件中的<dependencies>部分。

代码清单E-2 POM:依赖项

<dependencies>   <dependency>        <groupId>com.google.inject</groupId>      <artifactId>guice</artifactId> //❶工件的唯一ID      <version>3.0</version>      <scope>compile</scope> //❷compile作用域   </dependency>   <dependency>      <groupId>javax.inject</groupId>      <artifactId>javax.inject</artifactId>      <version>1</version>      <scope>compile</scope>    </dependency>   <dependency>      <groupId>org.codehaus.groovy</groupId>      <artifactId>groovy-all</artifactId>      <version>1.8.6</version>      <scope>compile</scope>   </dependency>   <dependency>      <groupId>org.hibernate</groupId>      <artifactId>hibernate-core</artifactId>      <version>3.6.3.Final</version>      <scope>compile</scope>   </dependency>   <dependency>      <groupId>org.ow2.asm</groupId>      <artifactId>asm</artifactId>      <version>4.0</version>      <scope>compile</scope>   </dependency>   <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.8.2</version>      <scope>test</scope> //❸test作用域   </dependency>   <dependency>      <groupId>org.mockito</groupId>      <artifactId>mockito-all</artifactId>      <version>1.8.5</version>      <scope>test</scope>   </dependency>   <dependency>      <groupId>org.scalatest</groupId>      <artifactId>scalatest_2.9.0</artifactId>      <version>1.6.1</version>      <scope>compile</scope> //❹compile作用域   </dependency>   <dependency>      <groupId>org.hsqldb</groupId>      <artifactId>hsqldb</artifactId>      <version>2.2.4</version>      <scope>test</scope>   </dependency>   <dependency>      <groupId>javassist</groupId>      <artifactId>javassist</artifactId>      <version>3.12.1.GA</version>      <scope>test</scope>   </dependency></dependencies>  

为了让Maven找到我们引用的工件,需要给出正确的<groupId><artifactId><version>❶ 。我们在前面说过了,将<scope>设为compile❷会将那些JAR文件加到编译代码所用的CLASSPATH中。

<scope>设为test❸会确保Maven编译和运行测试时将这些JAR文件加到CLASSPATH中。scalatest类库是其中比较奇怪的,它应该放在test作用域中,但要放在compile作用域❹ 才能用。3

3 希望这个插件的后续版本能解决这个问题。

Maven pom.xml文件并不像我们所期望的那么紧凑,但我们执行的是三种语言的构建(Java、Groovy和Scala),还能生成报告。希望随着对这一领域的工具支持不断改善,Maven构建脚本能变得更精简。