Ví dụ các loại dependency Scope trong Maven
(Xem thêm: Tự học maven)
Dependency Scope trong Maven
Dependency Scope trong Maven được sử dụng để giới hạn tính chất bắc cầu của một dependency.
Đồng thời dependency scope cũng được sử dụng để tác động tới các classpath được sử dụng cho các build task khác nhau.
1. Các Dependency Scope trong Maven
Trong maven có 6 loại dependency scope là compile
, provided
, runtime
, test
, system
, import
.
1.1. compile
Đây là scope mặc định, được sử dụng trong trường hợp scope không được chỉ rõ. Compile dependency có sẵn cho trong tất cả classpath của một project
<dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency>
1.2. provided
Dependency được dùng trong qua trình build nhưng sẽ không được deploy, tức là các file jar của dependency này sẽ được cung cấp bởi JDK, container trong quá trình runtime. Ví dụ, khi bạn build một ứng dụng web cho Java Enterprise Edition, bạn sẽ thiết lập dependency như Servlet API và các Java EE api liên quan với scope là provide vì web container (như tomcat, glassfish…) đã cung cấp sẵn các file .jar cho phần này.
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>
1.3. runtime
Các dependency không được sử dụng bởi quá trình compile mà chỉ được sử dụng bởi quá trình runtime.
Ví dụ dependency JDBC driver, ta chỉ sử dụng các class của nó trong quá trình runtime.
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> <scope>runtime</scope> </dependency>
1.4. test
Các dependency của scope này không cần thiết cho việc build hay chạy project.Nó chỉ được sử dụng cho mục đích compile và chạy các unit test.
Ví dụ dependency junit chỉ dùng cho quá trình test.
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
1.5. system
Scope này giống với provided scope, tuy nhiên các file .jar không được cung cấp bởi JDK hay container mà bạn phải chỉ rõ vị trí các file của dependency sử dụng.
Ví dụ bạn có file jar và muốn sử dụng nó như một dependency thì ta sử dụng scope system.
Ví dụ file commons-1.0.0.jar
trong có trên repository, nên mình sẽ đặt nó trong folder lib của project và sử dụng scope system.
<dependency> <groupId>stackjava.com</groupId> <artifactId>commons-utils</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${project.basedir}/libs/commons-1.0.0.jar</systemPath> </dependency>
1.6. import
Scope này chỉ được sử dụng cho các dependency có type là pom
và nằm trong thẻ dependencyManagement
. Các dependency này sẽ được thay thế bởi các dependency có hiệu năng cao hơn.
<dependencyManagement> <dependencies> <dependency> <groupId>stackjava.com</groupId> <artifactId>custom-project</artifactId> <version>SNAPSHOT</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement>
Okay, Done!
References:
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html