Ví dụ các loại dependency Scope trong Maven

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

stackjava.com