PDA

View Full Version : Cài đăt và thao tác với Maven trên Eclipse IDE [Giới thiệu về Apache Maven]



iamvtn
17-03-2012, 12:21 AM
Đầu tiên xin chào tất cả các anh em Cộng Đồng C Việt, sau một thời gian mải mê chinh chiến và yêu đương (bốc phét đấy) giờ mình đã trở lại và... ăn hại hơn xưa =)).

Đang đánh một dự án sử dụng Maven, cảm thấy cực kỳ ấn tượng với thằng này, nó thật sự rất hay và tiện lợi với các dự án cỡ lớn. OK, giờ chúng ta hãy cùng nhau khám phá Maven nhé :D


http://files.myopera.com/caffeJava/blog/mavenlogo.PNG


Phần 1: Khái niệm về Maven

Đầu tiên là khái niệm về Maven, Maven là gì, nó có lợi ích gì, cái này các bạn "Gúc" một phát ra đầy rẫy mình chỉ tóm tắt chút đỉnh những tài liệu trên "Gúc" để mọi người có thể hình dung cơ bản về Maven. Sau đó mình sẽ tiếp vào phần 2 luôn, tính mình không thích lý thuyết dài dòng.

Đối với những Dev nào làm về cách hệ thống lớn, phức tạp sử dụng nhiều thư viện và frame work lại đòi hỏi phải release liên tục cho nên công việc đóng gói (build & deploy), quản lý, nâng cấp và bào trì chúng thực sự rất oải. Ngoài ra việc tích hợp các thư viện mới cũng như quản lý và nâng cấp các thư viện có sẵn là tương đối phức tạp.

Tuy nhiên, những trở ngại nói trên hoàn toàn có thể giải quyết được nhờ vào Apache Maven.

Vậy ưu điểm của Maven là gì đó là:

Tự động hóa toàn bộ quá trình release project, khởi tạo, cập nhật thư viện, build & unit test và release, với một project cỡ lớn thì việc này là tối quan trọng, chỉ cần một sai lầm trong một công đoạn là có để delay cả dự án (lúc đấy thì tha hồ mà OT nhá =)).

Quản lý các dependency (các thư viện) trong project một các ưu việt: tự động cập nhật, mở rộng dễ dàng, đóng gói. Vì thế toàn bộ các file jar thư viện điều được "vứt" cho Maven quản lý điều đó khiến cho dung lượng project của chúng ta nhẹ nhàng đi rất nhiều.

Phân chia 1 project lớn thành các module nhỏ, từ đó cho phép làm việc đồng thời trên các module khác nhau, đồng thời vẫn tạo được tính thống nhất. Không phụ thuộc vào IDE, cho phép chuyển đổi từ Eclipse sang NetBeans, IntelliJ IDEA ... một cách dễ dàng. Mình thấy trong thực thế thấy rất nhiều dự án được nhiều công ty cùng phát triển, mỗi công ty lại phát triển một module và lại có một chuẩn IDE riêng nên Maven quả là một lựa chọn không tồi.

Trong thực tế thì cũng có khá nhiều dự án cũng như các công ty sử dụng Maven như một nền tảng build với những ứng dụng Java Enterprise. Các Dev, các bạn đã khởi đầu với Ant như là Beginner, vậy hãy đến với Maven như một Professional.

iamvtn
17-03-2012, 12:22 AM
Phần 2: Cài đặt Maven.

1. Đầu tiên bạn hãy tải Maven tại địa chỉ: maven.apache.org/download.html
Ở đây tôi tải bản 3.0.4 là bản mới nhất tại thời điểm tác giả viết bài này.

2. Giải nén rồi để ở đâu đó tùy bạn, ở đây tôi để Maven tại: C:\apache-maven-3.0.4

3. Thiết lập biến môi trường.

Bạn hãy vào System Properties chọn Environment Variables.
8853

Sau đó chọn New trong mục System variables thiết lập MAVEN_HOME chỉ đến thư mục cài Maven như hình sau.
8854

Sau đó ta hãy thêm (edit) patch cho Maven "%M2_HOME%\bin" trong mục Patch trong mục System variables như trong hình:
8855

Sau đó ta hãy vào Command line (vào run gõ cmd -> enter) thử lệnh maven --version
8856
Nếu như trên hình tức là tức là mọi việc đã được cấu hình chính xác.

iamvtn
17-03-2012, 12:24 AM
Phần 3: Thao tác với Maven trên Eclipse.

Bạn cũng có thể tạo một dự án Maven từ dòng lệnh command line, nhưng ở đây tôi xin phép hướng dẫn thao tác với Maven trên Eclipse. Eclipse mà một IDE tuyệt vời một người bạn không thể thiếu đối với những Java Dev.

Đầu tiên bạn phải tải plugin m2eclispe cho Eclipse tại đây: eclipse.org/m2e/download/
Ở đây tôi dùng Eclipse mới nhất là bản Eclipse 3.7 (Indigo).
Bạn vào menu Help ấn chọn Install New Software -> điền URL: download.eclipse.org/technology/m2e/releases vào mục work with rồi ấn Add -> Gõ tên plugin rồi ấn OK sẽ hiện thị ra như hình sau:
8857

Sau đó việc của bạn là ấn next và chờ plugin cài đặt xong, tranh thủ thư giãn làm cốc caffe cái nhỉ :D.

Khi plugin cài đặt xong bạn hãy restart lại Eclipse, giờ bạn đã có một công cụ tuyệt với để bắt đầu với một dự án Maven đầu tiên.
Trước khi tạo project bạn hãy config lại thư viện Maven trong eclipse như sau: chọn menu Window -> Preferences -> Maven -> Installations ấn nút Add rồi chỉ đến thư mục cài đặt Maven rồi ấn OK để Eclipse làm việc với Maven mình vừa cài đặt bên trên.
8858

Việc tạo một một Maven bây giờ trở nên dễ hơn ăn kẹo, đơn giản chỉ là chọn New -> Maven project :D. Trong phần Artifact-Id cho từng loại project khác nhau, ở đây tôi chọn maven-archetype-quickstart
8859

Tiếp theo bạn hãy định nghĩa Group Id, Artifact Id và version cho project ở đây tôi gõ như sau
Group Id: com.iamvtn.maven
Artifact Id: helloworld
Vậy hai thằng này nó có ý nghĩa là gì? Tôi sẽ đề cập trong phần 4: Tìm hiểu các thành phần trong Maven project.
8860

Sau khi ấn finish project sẽ có cấu trúc như sau:
8861

Giờ bạn có thể build, clean hay install hoàn toàn trên eclipse bằng cách bạn click chuột phải vào project chọn Run as -> Build, Clean, Install ...
File build được sẽ được lưu vào thư mục target của dự án.

(chú ý hãy enable chức năng Workspace Resolution bằng cách click chuột phải vào project chọn đến menu Maven -> Enable Workspace Resolution)

iamvtn
17-03-2012, 12:26 AM
Phần 4: Tìm hiểu các thành phần trong Maven project.

1. Đầu tiên ta hãy tìm hiểu và file pom.xml, vậy file pom này có ý nghĩa gì mà cách dùng nó thế nào?

Maven dùng khái niệm Project Object Model(POM) để mô tả việc build project, các thành phần phụ thuộc và các module (dependency). Nó định nghĩa trước các target cho việc khai báo task, trình biên dịch, đóng gói và thứ tự hoạt động để mọi việc diến ra tốt nhất. Maven tải các thư viện, plug-in từ 1 hoặc nhiều repositories. Cũng có thể upload các sản phẩm lên repository sau khi đã build xong. Nói chung thì nó là một file config chung cả cả Maven project.

Ta hãy tìm hiểu và mổ xẻ file pom.xml trên project maven ta vừa tạo trên phần 3.

Model version liên luôn là 4.0.0 với Maven 2.x trở lên


<modelVersion>4.0.0</modelVersion>

Group ID tương tự như là namespace(tên gói).

<groupId>com.iamvtn.maven</groupId>
Đây chính là tên của maven project.

<artifactId>helloworld</artifactId>
Định danh version của maven project

<version>1.0</version>
Dạng packaging của project có thể là dạng gói jar, pom hay bundle ...

<packaging>jar</packaging>
Tên của project

<name>helloworld</name>
Đây là nơi gọi các library dependencies ở đây tôi có sử dụng JUnit cho việc viết Unit test
Bạn có thể gọi thêm các library bằng thêm các thẻ dependency vào, vậy đấy việc thêm bớt hay upgrade thư viện chỉ đơn giản là config vài dòng lệnh, khỏe re không các bạn

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
Ngoài ra bạn có thể Maven còn có hỗ trợ những plugin vô cùng phong phú ví dụ đơn giản như plugin để complie Java, để dùng nó đơn giản bạn chỉ cần config như sau.


<build>
<plugins>
<!-- to compile with 1.5 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
<version>2.3.2</version>
</plugin>
</plugins>
</build>


Helloworld project vừa tạo mặc định ta có hai phần để chứa các java code đó là src/mail/java để chứa các logic code và src/test/java để chứa các kịch bản Unit test.

Ta hãy xem lớp App.java trong src/mail/java, bạn có thể tự do phát triển và coding tùy ý ở đây.

package com.iamvtn.maven.helloworld;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

Đáng chú ý là lớp AppTest, ở đây bạn có thể viết các kịch bản test case cho việc unit test, khi Maven build nó sẽ chạy qua tất cả các test case và hiện thị ra thông báo ngay khi đang build. Việc tạo Unit test cho các project là việc rất nên làm, bắt trước cái chữ ký của r2 "Code without test is just like cook without taste" :D.

package com.iamvtn.maven.helloworld;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class AppTest extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}

/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}

/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

iamvtn
17-03-2012, 12:28 AM
Phần 5. Làm việc với nhiều module với Maven


Như phần 1 đã nói maven có điểm mạnh với việc làm việc với nhiều module, sau đây ta sẽ tìm hiểu cách tạo các module và set các chúng sử dụng lẫn nhau (dependency) như thế nào.

Sau đây tôi sẽ tạo ra 4 module là Model, Persistence, Controller và View, nghe quen nhỉ, he he tôi sẽ tạo một Maven project theo kiến trúc MVC :D.

Đầu tiên để tạo một Maven Module thì Parent project phải có kiểu packaging là pom, ta config lại packaging của helloworld project như sau:

<packaging>pom</packaging>

Sau đó click chuột phải vào helloworld project chọn New -> Maven Module cũng tương tự như tạo Maven project bạn chọn Artifact-Id là maven-archetype-quickstart rồi chọn package name ở đây tôi gõ là com.iamvtn.maven.model.domain

Sau khi Maven module được tạo ta sẽ có cấu trúc project như sau
8862

Khi đó file pom.xml trong parent maven project sẽ thêm vào các module vừa tạo như sau:


<modules>
<module>model</module>
</modules>

Tiếp theo ta sẽ tạo một domain class có tên là Hello có một thuộc tình là String sayHello


package com.iamvtn.helloworld.model.domain;

public class Hello {
String sayHello;

/**
* @return the sayHello
*/
public String getSayHello() {
return sayHello;
}

/**
* @param sayHello the sayHello to set
*/
public void setSayHello(String sayHello) {
this.sayHello = sayHello;
}
}


Tương tự ta cũng sẽ tạo lần lượt tạo thêm module Persistence Module này có tác dụng set dữ liệu cho Hello Object bên trên, để muốn dùng module Model thì trong file pom.xml của Persistence ta sẽ phải dependency đến Model module


<dependency>
<groupId>com.iamvtn.maven</groupId>
<artifactId>model</artifactId>
<version>1.0</version>
</dependency>

trong Persistence ta sẽ defince ra một Interface là HelloDao và một class implements là HelloDaoImpl

HelloDao

package com.iamvtn.maven.persistence.dao;

import com.iamvtn.maven.model.domain.Hello;

public interface HelloDao {
public Hello sayHello ();
}

HelloDaoImpl


package com.iamvtn.maven.persistence.dao.impl;

import com.iamvtn.maven.model.domain.Hello;
import com.iamvtn.maven.persistence.dao.HelloDao;

public class HelloDaoImpl implements HelloDao {

public Hello sayHello() {
Hello hello = new Hello();
hello.setSayHello("Hello");
return hello;
}
}


Tương tự ta cũng tạo ra Maven module là Controller, thằng Controller này sử dụng đến lớp Persistence và Model thì trong pom.xml của Controller ta cũng phải khai báo các dependency sau:


<dependency>
<groupId>com.iamvtn.maven</groupId>
<artifactId>model</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.iamvtn.maven</groupId>
<artifactId>persistence</artifactId>
<version>1.0</version>
</dependency>

Trong Controller tôi cũng định nghĩa ra một Interface HelloLogicvà một Class implements HelloLogicImpl để thực hiện gọi đến Persistence và lấy ra dữ liệu của sayHello như sau:
HelloLogic:

package com.iamvtn.maven.controller.logic;

public interface HelloLogic {
public String sayHello();
}

HelloLogicImpl

package com.iamvtn.maven.controller.logic.impl;

import com.iamvtn.maven.controller.logic.HelloLogic;
import com.iamvtn.maven.model.domain.Hello;
import com.iamvtn.maven.persistence.dao.HelloDao;
import com.iamvtn.maven.persistence.dao.impl.HelloDaoImpl ;

public class HelloLogicImpl implements HelloLogic {

public String sayHello() {
Hello hello = new Hello();
HelloDao helloDao = new HelloDaoImpl();
hello = helloDao.sayHello();
String sayHello = hello.getSayHello();
return sayHello;
}

}


Cuối cùng ta tạo một Maven module là View, module này sẽ gọi đến Controller để hiện thị ra sayHello
tương tự ta cũng config trong file pom.xml dependency đến Controller

<dependency>
<groupId>com.iamvtn.maven</groupId>
<artifactId>controller</artifactId>
<version>1.0</version>
</dependency>
Và cuối cùng ta sẽ thực hiện gọi đến Controller

package com.iamvtn.maven.view;

import com.iamvtn.maven.controller.logic.HelloLogic;
import com.iamvtn.maven.controller.logic.impl.HelloLogicI mpl;

/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
HelloLogic helloLogic = new HelloLogicImpl();
String sayHello = helloLogic.sayHello();
System.out.println( sayHello );
}
}

Phù thế là bạn đã thực hiện tạo ra được một Maven project có nhiều các module con hoạt động theo mô hình MVC rồi đấy.

Giờ bạn có thể build project maven và tùy ý sử dụng được rồi.
Có hai cách build một là bạn dùng Eclipse bằng cách click chuột phải vào project rồi chọn Run as -> Maven install
8863

Hoặc sử dụng command line bằng cách gõ lệnh mvn instal
8864

Xem full mã nguồn ở đính kèm

Bạn có thể import maven project bằng cách chọn menu File -> Import -> Maven -> Existing Maven Project rồi chọn đến maven project bạn muốn mở là OK.

Vừa rồi tôi đã hướng dẫn bạn tìm hiểu cơ bản về Maven, đến đây chỉ mới là cào vào bề mặt của maven, Maven đang chờ bạn khám phá và chia sẻ tiếp đó :D.

minhquan22
19-04-2012, 09:20 AM
Bài viết rất hay. Em đang tìm hiểu về maven. Anh có thể viết tiếp các bài về maven để mọi người tham khảo được không?

thanglx
26-04-2012, 03:42 PM
Thank you very very much!

redbull2007
08-06-2013, 06:50 PM
cho tui hỏi, sau khi tui cài maven vào cmd gõ mvn --version thì nó hiện lên version, nhưng vào trong eclipse thì không tạo được maven project, ai biết xin giúp giùm với, Thanks nhiều!

redbull2007
10-06-2013, 09:30 AM
Phần 3: Thao tác với Maven trên Eclipse.

Bạn cũng có thể tạo một dự án Maven từ dòng lệnh command line, nhưng ở đây tôi xin phép hướng dẫn thao tác với Maven trên Eclipse. Eclipse mà một IDE tuyệt vời một người bạn không thể thiếu đối với những Java Dev.

Đầu tiên bạn phải tải plugin m2eclispe cho Eclipse tại đây: eclipse.org/m2e/download/
Ở đây tôi dùng Eclipse mới nhất là bản Eclipse 3.7 (Indigo).
Bạn vào menu Help ấn chọn Install New Software -> điền URL: download.eclipse.org/technology/m2e/releases vào mục work with rồi ấn Add -> Gõ tên plugin rồi ấn OK sẽ hiện thị ra như hình sau:
8857

Sau đó việc của bạn là ấn next và chờ plugin cài đặt xong, tranh thủ thư giãn làm cốc caffe cái nhỉ :D.

Khi plugin cài đặt xong bạn hãy restart lại Eclipse, giờ bạn đã có một công cụ tuyệt với để bắt đầu với một dự án Maven đầu tiên.
Trước khi tạo project bạn hãy config lại thư viện Maven trong eclipse như sau: chọn menu Window -> Preferences -> Maven -> Installations ấn nút Add rồi chỉ đến thư mục cài đặt Maven rồi ấn OK để Eclipse làm việc với Maven mình vừa cài đặt bên trên.
8858

Việc tạo một một Maven bây giờ trở nên dễ hơn ăn kẹo, đơn giản chỉ là chọn New -> Maven project :D. Trong phần Artifact-Id cho từng loại project khác nhau, ở đây tôi chọn maven-archetype-quickstart
8859

Tiếp theo bạn hãy định nghĩa Group Id, Artifact Id và version cho project ở đây tôi gõ như sau
Group Id: com.iamvtn.maven
Artifact Id: helloworld
Vậy hai thằng này nó có ý nghĩa là gì? Tôi sẽ đề cập trong phần 4: Tìm hiểu các thành phần trong Maven project.
8860

Sau khi ấn finish project sẽ có cấu trúc như sau:
8861

Giờ bạn có thể build, clean hay install hoàn toàn trên eclipse bằng cách bạn click chuột phải vào project chọn Run as -> Build, Clean, Install ...
File build được sẽ được lưu vào thư mục target của dự án.

(chú ý hãy enable chức năng Workspace Resolution bằng cách click chuột phải vào project chọn đến menu Maven -> Enable Workspace Resolution)

cho tui hỏi, sau khi tui cài maven vào cmd gõ mvn --version thì nó hiện lên version, nhưng vào trong eclipse thì không tạo được maven project, ai biết xin giúp giùm với, Thanks nhiều!

iuiuadu_93
11-08-2014, 12:45 AM
Bài khá cũ nhưng sẽ mới cho các bạn mới bắt đầu tìm hiểu về maven.
Mình thấy có clip này sẽ hướng dẫn cho các bạn cách cài đặt và chạy thử 1 ví dụ cụ thể. Mình cũng bắt đầu từ nó.
Mong là có ích cho các bạn!

http://youtu.be/4Q-laqZ35EA