Thursday, March 24, 2005

Maven Eclipse Plugin

ใครที่เคยใช้ java คงจะเคยใช้ ant มากันแล้ว
ข้อเสียของ ant (จริงๆก็ไม่ใช่ข้อเสียหรอก) ก็คือ
ไม่ว่าจะเขียนกี่ project
file build.xml ก็หน้าตาอีหรอบเดิมทุกที
(คนที่เคยเขียน ant คงรู้ว่า วิธีการเขียน
ant ที่เร็วที่สุดก็คือการ copy, paste จาก
build file เก่า)
จนมีคนคิดว่า เอ๊ะทำไมเราต้องมาเขียน
อะไรซ้ำไปซ้ำมา ก็เลยเกิดเป็น maven
ขึ้นมา

การเขียน maven ถ้าเป็น project ธรรมดา
ก็เพียงเขียนแต่ project.xml ซึ่งเป็น descriptor
อธิบายรายละเอียดของ project
ซึ่ง key สำคัญตัวหนึ่งที่ maven จัดการให้ก็คือ
library dependency ซึ่ง maven จะจัดการหา
jar file ตาม version ที่เราระบุให้
โดย mavenจะ maintain jar file นั้นไว้ใน
local repository ของตัวเอง กรณีทีในเครื่อง
local ไม่มี file นั้น ก็จะทำการ download
จาก remote repository (ผมชอบ feature นี้มาก
เพราะแทนที่เราจะมี jar file ที่ใช้บ่อยๆอย่าง log4j.jar
กระจายอยู่ในทุก project ถ้าใช้ maven ก็จะ
เกิดการ share jar ไว้ที่ repository ที่เดียว)

ที่นี้ถ้าเราต้องการใช้ eclipse ร่วมกับ
maven , maven ก็มี plugin อยู่ตัว
ที่ช่วยในการ generate .project กับ
.classpath ให้เรา (เป็น file ที่ eclipse
ใช้ในขบวนการ build) ทำให้เรา
เปิด eclipse มา edit source ได้เลย
ไม่ต้องไปเสียเวลา add jar file เข้ามา
ใน build path อีก

การใช้ก็ไม่ยากอะไร
เขียน project .xml เสร็จ ก็สั่ง
maven eclipse

ตัว file .classpath ที่ maven สร้างให้จะสร้างตามนี้
1. the build source directory
2. the build unit test source directory
3. the JRE being used
4. the appropriate version of JUnit
5. each Maven project dependency
6. an output directory for compiled code: target\classes
7. any .zip source archives

ตัวอย่าง .classpath ที่ maven gen ให้
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="" kind="src" path="src/main/java">
</classpathentry>
<classpathentry excluding="" including="" kind="src" path="src/main/resources">
</classpathentry>
<classpathentry output="target/test-classes" kind="src" path="src/test/java">
</classpathentry>
<classpathentry kind="var" path="MAVEN_REPO/junit/jars/junit-3.8.1.jar">
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
</classpathentry>
<classpathentry kind="var" path="MAVEN_REPO/log4j/jars/log4j-1.2.8.jar">
</classpathentry>
<classpathentry kind="output" path="target/classes">
</classpathentry>
</classpath>

จะสังเกตุเห็นว่า มี variable อยู่ตัวที่ชื่อ MAVEN_REPO (maven repository location)
ซึ่งเราต้องเข้าไป manual add ใน eclipse เอง
หรือไม่ก็สั่ง
maven eclipse:add-maven-repo 

แต่การสั่งแบบนี้ต้องมีการ set ค่า ${maven.eclipse.workspace}
(eclipse workspace location)
ไว้ใน project.properties ด้วย

อ่านเพิ่มเติม

Related link from Roti

No comments: