* compile,缺省值,適用於所有階段,會隨着項目一起發佈。
* provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。
* runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。
* test,只在測試時使用,用於編譯和運行測試代碼。不會隨項目發佈。
* system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。
今天遇到一個奇怪的問題 項目的路徑中有snakeyaml.jar的依賴 但是新建的類時候 卻無法引入Yaml這個類,
然後查了一下maven的依賴樹
mvn dependency:tree
....
[INFO] +- org.springframework.boot:spring-boot-starter:jar:1.5.19.RELEASE:compile
[INFO] | +- org.springframework.boot:spring-boot:jar:1.5.19.RELEASE:compile
[INFO] | \- org.yaml:snakeyaml:jar:1.17:runtime
....
如上圖 確實引入了 不過那個scope有問題 只有在runtime時可用 在編寫代碼是不可用的,因爲這個依賴是已經存在的 我們不需要額外引入 只需要修改一下scope就可以了
<dependency>
<groupId> org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<scope>provided</scope>
</dependency>