Khi phát triển ứng dụng Java sử dụng Maven, thỉnh thoảng bạn sẽ cần phải quản lý các thư viện (library) không có sẵn trên các kho lưu trữ công cộng như Maven Central. Trong tình huống này, thay vì tải từ xa, chúng ta cần đưa file .jar nằm trong máy tính vào quá trình xây dựng dự án. Dưới đây là hai phương pháp phổ biến để thực hiện việc này.
1. Sử dụng phạm vi System Scope
Phương pháp này yêu cầu khai báo trực tiếp đường dẫn đến file jar trong tập tin cấu hình pom.xml. Bạn cần thiết lập thẻ scope thành system và chỉ rõ vị trí tệp thông qua systemPath.
<dependency>
<groupId>com.internal.auth</groupId>
<artifactId>security-toolkit</artifactId>
<version>3.0.0</version>
<scope>system</scope>
<!-- Đường dẫn tới thư mục chứa jar trong project -->
<systemPath>${project.basedir}/libs/security-toolkit-3.0.0.jar</systemPath>
</dependency>
Tuy nhiên, nếu chỉ thêm dependency trên thì khi đóng gói ứng dụng (đặc biệt là Spring Boot), thư mục jar có thể bị bỏ sót. Để khắc phục, bạn cần bổ sung cấu hình trong phần <build> để sao chép thư mục libs vào nơi giải nén của file chạy:
<build>
<resources>
<resource>
<directory>libs</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
</build>
Lưu ý rằng cách tiếp cận này có thể phát sinh cảnh báo trong quá trình biên dịch nhưng vẫn đảm bảo chức năng hoạt động đúng như mong đợi.
2. Cài đặt vào Kho Lưu Trữ Local
Nếu bạn muốn tuân thủ chuẩn quản lý dependency tốt hơn, hãy cài đặt file jar lên kho lưu trữ cục bộ (local repository) của Maven. Sau đó, bạn có thể khai báo dependency giống hệt như các thư viện online.
Bước đầu tiên là thêm cấu hình plugin maven-install-plugin vào pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>add-local-auth-sdk</id>
<phase>validate</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>${project.basedir}/libs/security-toolkit-3.0.0.jar</file>
<packaging>jar</packaging>
<groupId>com.internal.auth</groupId>
<artifactId>security-toolkit</artifactId>
<version>3.0.0</version>
<generatePom>true</generatePom>
</configuration>
</execution>
</executions>
</plugin>
Cấu hình trên được gắn vào pha validate (hoặc clean tùy chiến lược) để đảm bảo trước khi build, Maven đã nạp thư mục đó vào hệ thống. Sau khi thực thi chu trình build một lần, thư viện sẽ nằm trong folder .m2/repository và có thể được gọi trực tiếp trong phần dependencies mà không cần đường dẫn systemPath.