大多數Java項目的依賴項清單都很長,java7developer也不例外。Maven可以幫你管理這些依賴項,它在Maven Central Repository中存了數量龐大的第三方類庫。重要的是,這些第三方類庫都有它們自己的pom.xml文件,其中又聲明了它們各自的依賴項,Maven由此可以推斷出你還需要哪些類庫並下載它們。
最初會用到兩個主要作用域是compile
和test
2。這跟把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構建腳本能變得更精簡。