讀古今文學網 > Java程序員修煉之道 > E.2 依賴項管理 >

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構建腳本能變得更精簡。