Posts Tagged ‘tutorial’

Basic 1: Java ,Maven และ Eclipse

February 2nd, 2010

Basic 1: Java ,Maven และ Eclipse (Basic Series)

1. เตรียม Java environment
สามารถ download ได้จาก http://java.sun.com/javase/downloads/index_jdk5.jsp
จากนั้น ก็ setup  JAVA_HOME  (D:\Java\jdk1.6.0_17)
เพิ่ม path ให้ชี้ไปที่  %JAVA_HOME%\bin

จากนั้น ก็เทส C:\>java –version

2. เตรียม Maven
สามารถ download ได้จาก  http://maven.apache.org/download.html
จากนั้น setup  M2_HOME (D:\java\apache-maven-2.2.1)
เพิ่ม path ให้ชี้ไปที่ %M2_HOME%\bin

จากนั้น ก็เทส C:\>mvn –version

2.1 ต่อมาต้องจัดการ configure ที่ Maven ก่อน แก้ settings.xml อยู่ใน D:\java\apache-maven-2.2.1\conf
set > local repository ให้ชี้ไปที่ <localRepository>C:/java/.m2/repository</localRepository> ซึ่ง ไฟล์ทุกอย่างที่ ใช้ Maven จัดการจะถูกเก็บไว้ในนี้
» Read more: Basic 1: Java ,Maven และ Eclipse

JavaRebel + Spring in Eclipse WTP plug-in

May 12th, 2009

จากที่พี่ @roofimon พูดถึงเรื่อง JavaRebel มันก็ช่างโดนใจน้อยๆของผมเหลือเกิน เพราะไอ้เรื่องนี้ก็ทิ่มแทงใจผมมาตั้งแต่วันแรกที่ทำเลยลองทำตาม blog ดูก็โอ้ว happy แต่ด้วยความที่ผมใช้ cmd maven แล้วมันไม่ถนัดมือไปหน่อยเลยว่ากันด้วยเรื่อง ide ก็เลยมานั่งนึกดู ถ้ายังนึกถึงรักเก่าที่ยังคบหาอยู่ก็ Netbeans พอมานั่งคุยกับรักปัจจุบันก็ eclipse ก็เลยมานั่งเทียบสิ่งนึงที่ javarebel ทำคือเมื่อมีการเปลี่ยนแปลง class มันจะทำการ reload ให้เรางั้นก็มานั่งลองดูเริ่มกันที่ Netbean ผมใช้ 6.5 นั่นคือผมว่ามันน่ารักสู้ eclipse ไม่ได้ในงานนี้ตรงที่มันไม่มี compile on save แต่เห็นว่า 6.7 มีนะครับแต่ก็ไม่รู้จะหล่อแค่ไหนเลยคิดว่าเรื่องที่เป็นจุดน่าจะเลือกก็คือ compile on save เลยมามองว่า eclipse ทำได้ดีกว่าเลย เอาวะ eclipse ก็ eclipse ก็มานั่งดู web ของ javarebelที่ http://www.zeroturnaround.com/javarebel/ อ้ะๆ เกิดสวรรค์น้อยๆที่เค้ามีการ ทำ eclipse plug-in ออกมาให้ด้วยแถมยังคงต่อกับ wtp plug-in ที่ eclipse เค้าคุยนักคุยหนาว่านี่หล่ะเจ๋งพอๆกะ netbeans ก็เลยเอาหล่ะเอามาลงกันก่อนเลย
ผมใช้ eclipse 3.4 codename***** และ wtp plug-in ซึ่งมันติดมาอยู่แล้วถ้าใครโหลดตัวที่เป็น web dev มาโดยการ ติดตั้ง plug-in ก็ตามฟอร์มครับ update site โลดโดย update site อยู่ที่ http://www.zeroturnaround.com/update-site/
แล้วก็ติดตั้งกันไป

หลังจากเราติดตั้งเรียบร้อยก็ว่ากันต่อที่การใช้งานหล่ะต๊กตาในการใช้งานของผมคือ Appfuse คงไม่ต้องร่ายยาวว่ามันคืออะไรนะครับ อันนี้คาดว่าน่าจะเคยลองเล่นกันแล้วแต่ถ้ายังขอให้บอกวันหลังจะเอามาเขียนเป็นอีกหนึ่ง entry ครับโดยผมก็เอา appfuse-springmvc มา adapt นิดหน่อยโดยไม่ใช้ maven ครับ ด้วยเหตุผลของเด็กน้อยโปรแกรมเมอร์จนๆ อย่างผมไม่มีเน็ตแรงๆ 5mb ไว้ใช้งานที่บ้านเลยต้อง offline กันไป

แต่ผมก็จะทำตามขั้นตอนของ คุณ @roofimon นะครับโดยขั้นตอนพี่เค้าเขียนไว้อย่างเมพแล้วเลยขอทำตามขั้นตอนหน่อยแต่เปลี่ยนวิธีก็เลยเอาของพี่มา adapt apply หน่อยๆ อิอิ

ไป download ไลบรารี่มาก่อนที่ http://www.zeroturnaround.com/javarebel/
จากนั้นเราก็ต้องบอกให้ Servlet Container ที่เราใช้ว่าเราช่วยโหลดได้นี่เข้าไปหน่อยนะจังหวะที่มัน Start-up ซึ่งในที่นี้ผมประมาณว่าทุกคนใช้ Tomcat นะครับดังนั้นสิ่งที่เราต้องทำคือไปที่ catalina.bat แล้วเพิ่มคำสั่งนี้เข้าไป(เอาไว้ประมาณ บรรทัดที่ 231)

 set JAVA_OPTS=-noverify -javaagent:{PATH_TO_JAVAREBEL}javarebel.jar %JAVA_OPTS% 

เมื่อเราใช้ ide + plug-in เราก็ใช้วิธีการ

ไปที่ Window » Preferences » JavaRebel แล้วก็จะเจอความงามซ่นอยู่ครับโดยเราก็เลือก JavaRebel jar location ครับเพื่อให้ ตัว wtp ของเรารู้จัก JavaRebel แล้วก็ไป

run >> run config… ก็จะเจอหน้าตาสวยงามดังนี้ครับ

ตามที่วงเลยครับเท่านี้ก็ลองมา test start server กันดูก็จะเห็นแบบนี้ใน console

ถ้าที่ comsole มีข้อความนี้แสดงขึ้นมาแสดงว่าเรามาถูกทาง

#############################################################

ZeroTurnaround JavaRebel 2.0 (200903241906)

(c) Copyright Webmedia, Ltd, 2007-2009. All rights reserved.

เปิดการใช้งานให้กับตัว servlet container ของเราผมใช้ tomcat 6 นะครับโดยไปเปิด server editor ขึ้นมาแล้วเตะสองทีเร็วๆจากนั้นจะพบกับหน้าจอ tomcat config แบบนี้ครับ

พอดีไปโขมยเค้ามาเด่วผมมาแก้รูปให้นะครับพอดีมัน upload ขึ้น server ไม่ได้

น่านยังมีกันเราลืมโดยบอกว่าให้เช็คให้ดีนะให้เราไปปิด auto publish ซะตอนแรกผมก็ไปปิดครับเชื่อคนง่ายพอมาเขียนโอ้ว happy อย่างยิ่งแต่เราลืมมองไปว่าแก้ class มันไม่มีปัญหาครับแต่ถ้าเราแก้ jsp มันไม่ publis ไปให้เราอ่ะงงเลยเลยทำตามนี้ไปก่อนแล้วกันครับเด่วจะ เล่าให้ฟังหลังๆ

mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp

เราก็จะได้เวบโปรเจคโง่ๆมาหนึ่งอันหนึ่งชื่อ my-webapp จากนั้นเราต้องเพิ่มความสามารถของ JavaRebel เข้าไปให้ maven ด้วยโดยให้เราเปิด pom.xml ขึ้นมาแล้วเพิ่ม plugin เข้าไปดังนี้

ที่บรรทัดประมาณที่ 11

<pluginRepositories>
<pluginRepository>
<id>zt-repo</id>
<name>Zero turnaround repo</name>
<url>http://repos.zeroturnaround.com/maven2</url>
</pluginRepository>
</pluginRepositories>

อีกส่วนที่ประมาณบรรทัดที่ 139 ในส่วนของ plugins

<plugin>
<groupId>org.zeroturnaround</groupId>
<artifactId>javarebel-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-rebel-xml</id>
<phase>process-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>

เมื่อเรียบร้อยแล้วให้สั่ง mvn javarebel:generate คำสั่งนี้จะไปสร้างไฟล์ชื่อ rebel.xml ที่ WEB-INF/classes ครับโดยไฟล์นี้จะทำหน้าที่กำหนด target ที่เก็บ class ไฟล์และ resources ต่างที่เราต้องการให้ทำ auto-reload เมื่อเกิดการเปลี่ยนแปลง

ขั้นตอนนี้ผมข้ามเรียบครับเพราะผมสร้างproject มาเอง dynamic web project manage มือใช้ ant ครับส่วน maven ที่อาไว้ gen file rebel.xml ก็ไม่ต้องครับเด่วเราใช้เวทมนต์ตามประสา วิสาดดดด

โดยไปคลิกขวาที่โปรเจ็คแล้วจะเห็นเมนูให้เรา generate rebe.xml ครับ แล้วให้ไปเลือกที่ที่เราไว้นั่นคือ output folder นั่นเอง
เท่ากับว่าตอนนี้เราก็มาถึง

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
<classpath>
<dir name="D:/workspace-seanet/TMS/build/classes">
</dir>
</classpath>
</application>

ละ พอ เหนื่อยครับทดลอง run โลดครับเมื่อรันจะเห็นว่าจะมี log ท่อนนึงบอกเราว่า

=============================== [JavaRebel Spring Framework Plugin DISABLED] ===============================
Plugins are contributed by third party and can cause compatibility problems.
If you have any troubles set -Drebel.spring_plugin=false to disable it.
------------------------------------------------------------------------------------------
Description: Supports adding new beans and adding new bean dependencies using
annotations or XML. Singletons will be reconfigured after the change. It also
supports adding or changing Spring MVC controllers or handlers.
=============================== [/JavaRebel Spring Framework Plugin DISABLED] ] ==============================

โห งอแง เลยครับไม่ตรงตัณหาของผมอย่างยิ่งเพราะผมจะเอามาใช้กับ spring แล้วขึ้นมายังงี้มันยอมไมได้เลยอ่าน log เล่นๆ เอ้อเค้าก็บอกวิธีมานี่หว่า If you have any troubles set -Drebel.spring_plugin=false to disable it.
เอาเลยผมไปจัดการไปที่ run>>condig… แล้วก็ไปเพิ่มที่นี่เลยครับ

เท่านี้หล่ะแล้วลองใหม่ก็จะเห็ฯlogหน้าตาพอจะสวยงามประมาณนี้

=============================== [JavaRebel Spring Framework Plugin ===============================
Plugins are contributed by third party and can cause compatibility problems.
If you have any troubles set -Drebel.spring_plugin=false to disable it.
------------------------------------------------------------------------------------------
Description: Supports adding new beans and adding new bean dependencies using
annotations or XML. Singletons will be reconfigured after the change. It also
supports adding or changing Spring MVC controllers or handlers.
=============================== [/JavaRebel Spring Framework Plugin ] ==============================

เท่านี้ก็หรูแล้ว

ทีนี้ลองแก้ file .java ดูแล้วไป refresh ดูครับไม่ต้องไปคลิก run ใหม่นะครับไม่ตรงจุดประสงค์อย่างยิ่งเพราะอย่างที่รู้มันก็จะไป restart server หรือไม่ก็ deploy ทับซึ่งมันไม่เหมาะกับเครื่องโปรแกรมเมอร์จนๆแรมน้อยๆอย่างผมครับแต่ก็นะพอไปดู log เฮ้ยมัน publih ไปให้เรา

ก็นั่นหล่ะครับเพราะว่าเรายังไมได้ตั้งให้มัน ปิดการ auto publish แต่ปัญหาอยู่ตรงนี้ครับพอเราไปตั้งให้มัน never auto publish มันก็จะไม่ยอม publish jsp ให้เราแต่ ตัว class แน่นอนอยู๋แล้วว่า javarebel agent รับผิดชอบเราก็เลยต้องโกง wtp กันหน่อยโดยยังตั้ง auto publish
อยู่แล้วไปเลือกเป็น module ให้มันปิดการ publish ซะเท่านี้เลย

พิมซะเมื่อยครับลองรันแล้วเทสกันดูหลาย case นะครับโดยรวมมันรวดเร็วอำนวยความสะดวกให้เราชาว spring66 มากมายผมซื้อแน่ๆ เขียนไปเขียนมาอ่านไปอ่านมายังงงอยู่ครับเอาเป็นว่าใครลองแล้วติด comment ถามกันมาแล้วกันครับ

ปล. ขอโทษด้วยครับ คุณ @roofimon นัดไว้ว่าจะขึ้นเที่ยงคืนแต่มาเอาเที่ยงวันครับ

สร้าง Spring Project แรกด้วย Maven

January 5th, 2009

การเรียนแบบ Learning By Doing น่าจะเป็นการเีรียนรู้ที่ไม่น่าเบื่อที่สุดสำหรับการเรียนเรื่อง Development Framework ดังนั้นบทความใน series นี้จะเป็นเรื่องของการสอน spring แบบสนุกๆกันเพื่อให้ทุกคนสามารถเข้าใจ spring ได้ง่ายขึ้น โดยที่เรามากำหนด environment พื้นฐานกันก่อนว่าการเรียนการสอนของเราจะใช้อะไรบ้าง

jdk 1.5 ขึ้นไป
maven2 ขึ้นไป
netbeans6.1 ขึ้นไป (แต่อันนี้แล้วแต่สะดวกนะครับ)
spring2.5 ขึ้นไป
ก่อนอื่นใครไม่รู้จัก Maven ขอให้ไปอ่านทำความเข้าใจที่เวบของ Maven เองนะครับ โดยการใช้ Maven จะช่วยเหลือเรามากๆในเรื่องของการบริหาร project structure และเรื่องของ library dependency ที่เป็นเรื่องที่น่ากลัวมากสำหรับคนที่เขียน Java ไม่คล่องเพราะมันจะใช้ Library เยอะมากจนน่าปวดหัวแถมมีหลาย version ด้วย ดังนั้นการใช้ Maven จะทำให้เราลืมเรื่องพวกนี้ไปได้เลย

เริ่มด้วยการสร้าง Project แบบว่างๆโล่งก่อนนะครับ โดยให้ทุกท่านพิมพ์คำสั่งนี้ลงไปในที่ที่ต้องการ

mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.spring66.tutorial -DartifactId=spring66-app

จากนนั้นเราจะได้โปรเจคชื่อ spring66-app มาพร้อมทั้งมี packeage พื้นฐาน com.spring66.tutorial มาให้พร้อม และถ้าเราเข้าไปใน spring66-app เราจะพบไฟล์ชื่อประหลาด pom.xml ให้เปิดไฟล์นี้ขึ้นมาครับหน้าตาจะประมาณนี้

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="...name space...">
<modelVersion>4.0.0</modelVersion>
<groupId>com.spring66.tutorial</groupId>
<artifactId>spring66-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>spring66-app</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>

จากนั้นในกรณีที่เราต้องการใช้ Library พิเศษสิ่งที่เราต้องทำคือการเพิ่ม เข้าไปแต่คนส่วนใหญ่มักจะสงสัย “แล้วตูต้องใส่พระเจ้าเหาอะไรเข้าไปบ้างวะ” คำตอบคือไปหาำตอบที่ mvnrepository สำหรับตัวอย่างของ spring2.5 สามารดูได้ที่ url นี้ครับโดยให้เลื่อนลงไปดูที่ POM Dependency เ ราจะเห็น

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>

อย่ารีรอครับไปแทรกที่ เลยครับ ดังนั้นเราจะได้หน้าตาใหม่ของ pom.xml ในส่วนของ dependencies ดังนี้

&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;junit&lt;/groupId&gt;
&lt;artifactId&gt;junit&lt;/artifactId&gt;
&lt;version&gt;3.8.1&lt;/version&gt;
&lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
&lt;/dependencies&gt;

หลังจากนั้นให้ทำการพิมพ์คำสั่ง

mvn compile

จากนั้น “เดินไปกินกาแฟ กินข้าว เลานเกมส์ จีบหญิง” เพราะ Maven จะ download ไฟล์ปริมาณมหาศาลพอสมควรมาที่เครื่องเรา ไฟล์เหล่านั้นคือ libraries ต่างๆที่ spring ต้องการใช้ในการทำงาน หลังจากเรียบร้อยให้ทำการเปิด Project นี้ด้วย IDE ตัวโปรดครับสำหรับใครที่ใช้ Eclipse ให้ทำเพิ่มด้วยการพิมพ์คำสั่ง (ต้องลง Maven Plugin ด้วยนะครับเพราะเวลาเอาเข้าต้อง Import เป็น Maven Project)

mvn eclpse:eclipse

เข้าไป ส่วนใครใช้ Netbeasn ให้ลง plugin ชื่อ Maven ลงไปครับจากนั้นก็เปิดมาชมกัน จากแต่ก่อนที่เราต้องมานั่งหลังขดหลังแข็ง add ตัว library เองอันนี้เเราเปิดปุ๊ป ติดปั๊ปครับ

…..
[เสริม] ถ้าใครมีปัญหา ติด proxy ที่ office ก็สามารถเข้าไปแก้ file “setttings.xml” ได้ใน folder ของ maven เลย
ตัวอย่าง > apache-maven-2.0.9\conf\settings.xml

<!-- proxies
| This is a list of proxies which can be used on this machine to connect to the network.
| Unless otherwise specified (by system property or command-line switch), the first proxy
| specification in this list marked as active will be used.
|-->
<proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
|
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net,some.host.com</nonProxyHosts>
</proxy>
-->
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<host>192.168.0.21</host>
<port>9999</port>
</proxy>
</proxies>