[Java] การนำ jar file library มาใช้กับ Maven Project
Dependency ทำให้เราสามารถใช้งาน source code จาก repository ได้ ทำให้ชีวิตโปรแกรมเมอร์อย่างเรา ๆ สะดวกสะบายพอสมควร อีกทั้งยังสามารถ share dependency ให้ทีมสามารถใช้งานได้เหมือนกัน
แต่ !! โลกก็ไม่ได้สวยงามเสมอไป บางทีโปรเจคเก่า ๆ ที่เป็นแบบ editor based ก็อาจทำร้ายเราได้ โดยเฉพาะ library ที่ทำกันขึ้นมาเอง (*.jar) ซึ่งไม่ได้ download มาจาก dependency ทำให้เมื่อมีคนใหม่เข้ามาในทีมก็อาจเสียเวลา setup กันอีก แทนที่จะเปิดขึ้นมาแล้วสามารถเริ่มทำงานได้เลย
วิธีการที่ผมใช้และคิดว่ามัน work สุดคือ การทำ local repository ในโปรเจคซะเลย
หลังจากรันคำสั่งแล้ว เราจะได้ local-libs หน้าตารก ๆ หน่อย ที่สำคัญคือไฟล์ *.jar เราจะถูกเปลี่ยนชื่อตาม attribute ที่กำหนด พร้อมกับไฟล์ *.pom เฉพาะสำหรับแต่ละ library
เพิ่ม dependency เพื่อเรียกใช้งานตามปกติ
เพียงเท่านี้ library เก่า ๆ ก็สามารถใช้งานในรูปแบบ maven ได้แล้ว แต่สิ่งสำคัญควรตกลงเรื่อง version กันให้ดี เพราะ maven จะไม่สนว่า *.jar ของเราเป็นอย่างไร เพียงแค่ copy ไปจัดให้อยู่ในรูปแบบของมันเท่านั้นเอง
ref : http://roufid.com/3-ways-to-add-local-jar-to-maven-project/
แต่ !! โลกก็ไม่ได้สวยงามเสมอไป บางทีโปรเจคเก่า ๆ ที่เป็นแบบ 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 |
<?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/