[Java] การนำ jar file library มาใช้กับ Maven Project

          Dependency ทำให้เราสามารถใช้งาน source code จาก repository ได้ ทำให้ชีวิตโปรแกรมเมอร์อย่างเรา ๆ สะดวกสะบายพอสมควร อีกทั้งยังสามารถ share dependency ให้ทีมสามารถใช้งานได้เหมือนกัน

          แต่ !! โลกก็ไม่ได้สวยงามเสมอไป บางทีโปรเจคเก่า ๆ ที่เป็นแบบ editor based ก็อาจทำร้ายเราได้ โดยเฉพาะ library ที่ทำกันขึ้นมาเอง (*.jar) ซึ่งไม่ได้ download มาจาก dependency ทำให้เมื่อมีคนใหม่เข้ามาในทีมก็อาจเสียเวลา setup กันอีก แทนที่จะเปิดขึ้นมาแล้วสามารถเริ่มทำงานได้เลย


วิธีการที่ผมใช้และคิดว่ามัน work สุดคือ การทำ local repository ในโปรเจคซะเลย

อันดับแรก เอา *.jar ไฟล์มาทำให้เป็น maven based ซะก่อน

mvn install:install-file 
 -Dfile=mylib1.0.jar 
 -DgroupId=th.in.lordgift 
 -DartifactId=MyLib 
 -Dversion=1.0 
 -Dpackaging=jar 
 -DlocalRepositoryPath=local-libs
  • file - ระบุ *.jar ของเรา ไม่จำเป็นต้องอยู่ในโปรเจค
  • localRepositoryPath - ระบุ directory ปลายทางที่ต้องการให้เป็น local repository (ในโปรเจค)
  • groupId, artifactId, version - เป็นค่าที่กำหนดเอง สามารถใส่อะไรก็ได้ แต่ควรตั้งตามรูปแบบของ maven ไม่งั้นตอนเรียกใช้ dependency ก็จะแปลก ๆ หน่อย (ทำได้ แต่ไม่ควร)

in-project repository
          หลังจากรันคำสั่งแล้ว เราจะได้ local-libs หน้าตารก ๆ หน่อย ที่สำคัญคือไฟล์ *.jar เราจะถูกเปลี่ยนชื่อตาม attribute ที่กำหนด พร้อมกับไฟล์ *.pom เฉพาะสำหรับแต่ละ library
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>th.in.lordgift</groupId>
  <artifactId>MyLib</artifactId>
  <version>1.0</version>
  <description>POM was created from install:install-file</description>
</project>

จัดการ pom.xml ในโปรเจค

เพิ่ม repository เพื่อชี้ไปที่ local-libs
<repositories>

 <!-- others repository (if any) -->

 <repository>
  <id>local-libs</id>
  <url>file://${project.basedir}/local-libs</url>
 </repository>
</repositories>

เพิ่ม dependency เพื่อเรียกใช้งานตามปกติ
<dependencies>

 <!-- others dependency (if any) -->

 <dependency>
  <groupId>th.in.lordgift</groupId>
  <artifactId>MyLib</artifactId>
  <version>1.0</version>
 </dependency>
</dependencies>

          เพียงเท่านี้ library เก่า ๆ ก็สามารถใช้งานในรูปแบบ maven ได้แล้ว แต่สิ่งสำคัญควรตกลงเรื่อง version กันให้ดี เพราะ maven จะไม่สนว่า *.jar ของเราเป็นอย่างไร เพียงแค่ copy ไปจัดให้อยู่ในรูปแบบของมันเท่านั้นเอง

ref : http://roufid.com/3-ways-to-add-local-jar-to-maven-project/

Facebook Comment

Popular post of 7 days

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)