Maven - Hướng dẫn nhanh

Maven là gì?

Maven là một công cụ quản lý và hiểu dự án cung cấp cho các nhà phát triển một khuôn khổ vòng đời xây dựng hoàn chỉnh. Nhóm phát triển có thể tự động hóa cơ sở hạ tầng xây dựng của dự án gần như không mất thời gian vì Maven sử dụng bố cục thư mục tiêu chuẩn và vòng đời xây dựng mặc định.

Trong trường hợp môi trường nhiều nhóm phát triển, Maven có thể thiết lập cách thức làm việc theo tiêu chuẩn trong thời gian rất ngắn. Vì hầu hết các thiết lập dự án đều đơn giản và có thể tái sử dụng, Maven giúp cuộc sống của nhà phát triển trở nên dễ dàng trong khi tạo báo cáo, kiểm tra, xây dựng và thử nghiệm các thiết lập tự động hóa.

Maven cung cấp cho các nhà phát triển những cách quản lý sau:

  • Builds
  • Documentation
  • Reporting
  • Dependencies
  • SCMs
  • Releases
  • Distribution
  • Danh sách gửi thư

Tóm lại, Maven đơn giản hóa và chuẩn hóa quy trình xây dựng dự án. Nó xử lý việc biên dịch, phân phối, tài liệu, cộng tác nhóm và các tác vụ khác một cách liền mạch. Maven tăng khả năng tái sử dụng và đảm nhận hầu hết các nhiệm vụ liên quan đến xây dựng.

Tiến hóa Maven

Maven ban đầu được thiết kế để đơn giản hóa quy trình xây dựng trong dự án Jakarta Turbine. Có một số dự án và mỗi dự án chứa các tệp xây dựng ANT hơi khác nhau. JAR đã được đăng ký vào CVS.

Nhóm Apache sau đó đã phát triển Maven có thể xây dựng nhiều dự án cùng nhau, xuất bản thông tin dự án, triển khai dự án, chia sẻ JAR trên một số dự án và giúp đỡ với sự cộng tác của các nhóm.

Mục tiêu

Mục tiêu chính của Maven là cung cấp cho nhà phát triển những điều sau:

  • Một mô hình toàn diện cho các dự án, có thể tái sử dụng, có thể bảo trì và dễ hiểu hơn.

  • Các plugin hoặc công cụ tương tác với mô hình khai báo này.

Cấu trúc và nội dung dự án Maven được khai báo trong tệp xml, pom.xml, được gọi là Mô hình đối tượng dự án (POM), là đơn vị cơ bản của toàn bộ hệ thống Maven. Trong các chương sau, chúng tôi sẽ giải thích chi tiết về POM.

Quy ước về cấu hình

Maven sử dụng Convention kết thúc Configuration, có nghĩa là nhà phát triển không bắt buộc phải tự tạo quy trình xây dựng.

Các nhà phát triển không cần phải đề cập đến từng chi tiết cấu hình. Maven cung cấp hành vi mặc định hợp lý cho các dự án. Khi một dự án Maven được tạo, Maven tạo cấu trúc dự án mặc định. Nhà phát triển chỉ được yêu cầu đặt các tệp cho phù hợp và họ không cần xác định bất kỳ cấu hình nào trong pom.xml.

Ví dụ: bảng sau đây hiển thị các giá trị mặc định cho tệp mã nguồn dự án, tệp tài nguyên và các cấu hình khác. Giả định,${basedir} biểu thị vị trí dự án -

Mục Mặc định
mã nguồn $ {basedir} / src / main / java
Tài nguyên $ {basedir} / src / main / resources
Kiểm tra $ {basedir} / src / test
Mã byte tuân thủ $ {basedir} / mục tiêu
JAR có thể phân phối $ {basedir} / target / lớp

Để xây dựng dự án, Maven cung cấp cho các nhà phát triển các tùy chọn để đề cập đến các mục tiêu vòng đời và sự phụ thuộc của dự án (dựa trên khả năng của plugin Maven và các quy ước mặc định của nó). Phần lớn các nhiệm vụ liên quan đến quản lý dự án và xây dựng được duy trì bởi các plugin Maven.

Các nhà phát triển có thể xây dựng bất kỳ dự án Maven nào mà không cần phải hiểu cách hoạt động của các plugin riêng lẻ. Chúng ta sẽ thảo luận chi tiết về Maven Plugins trong các chương sau.

Đặc điểm của Maven

  • Thiết lập dự án đơn giản tuân theo các phương pháp hay nhất.

  • Sử dụng nhất quán trên tất cả các dự án.

  • Quản lý phụ thuộc bao gồm cập nhật tự động.

  • Một kho thư viện lớn và ngày càng phát triển.

  • Có thể mở rộng, với khả năng dễ dàng viết các plugin bằng Java hoặc các ngôn ngữ kịch bản.

  • Truy cập tức thì vào các tính năng mới với ít hoặc không cần cấu hình thêm.

  • Model-based builds - Maven có thể xây dựng bất kỳ số lượng dự án nào thành các loại đầu ra được xác định trước như jar, war, metadata.

  • Coherent site of project information - Sử dụng cùng một siêu dữ liệu theo quy trình xây dựng, maven có thể tạo một trang web và một tệp PDF bao gồm tài liệu hoàn chỉnh.

  • Release management and distribution publication - Nếu không có cấu hình bổ sung, maven sẽ tích hợp với hệ thống kiểm soát nguồn của bạn như CVS và quản lý việc phát hành một dự án.

  • Backward Compatibility- Bạn có thể dễ dàng chuyển nhiều mô-đun của một dự án vào Maven 3 từ các phiên bản Maven cũ hơn. Nó cũng có thể hỗ trợ các phiên bản cũ hơn.

  • Automatic parent versioning - Không cần chỉ định phụ huynh trong mô-đun con để bảo trì.

  • Parallel builds- Nó phân tích đồ thị phụ thuộc của dự án và cho phép bạn xây dựng các mô-đun lịch trình song song. Sử dụng điều này, bạn có thể đạt được hiệu suất cải thiện 20-50%.

  • Better Error and Integrity Reporting - Maven cải thiện báo cáo lỗi và nó cung cấp cho bạn một liên kết đến trang wiki của Maven, nơi bạn sẽ nhận được mô tả đầy đủ về lỗi.

Maven là một công cụ dựa trên Java, vì vậy yêu cầu đầu tiên là phải cài đặt JDK trên máy của bạn.

Yêu cầu hệ thống

JDK 1.7 trở lên.
Ký ức Không có yêu cầu tối thiểu.
Dung lượng đĩa Không có yêu cầu tối thiểu.
Hệ điều hành Không có yêu cầu tối thiểu.

Bước 1 - Xác minh cài đặt Java trên máy của bạn

Mở bảng điều khiển và thực hiện các thao tác sau java chỉ huy.

Hệ điều hành Bài tập Chỉ huy
các cửa sổ Mở bảng điều khiển lệnh c: \> java -version
Linux Mở Command Terminal $ java -version
Mac Mở thiết bị đầu cuối máy: ~ joseph $ java -version

Hãy xác minh kết quả đầu ra cho tất cả các hệ điều hành -

Hệ điều hành Đầu ra
các cửa sổ

phiên bản java "1.7.0_60"

Môi trường thời gian chạy Java (TM) SE (bản dựng 1.7.0_60-b19)

Máy chủ ảo Java HotSpot (TM) 64-Bit (bản dựng 24.60-b09, chế độ hỗn hợp)

Linux

phiên bản java "1.7.0_60"

Môi trường thời gian chạy Java (TM) SE (bản dựng 1.7.0_60-b19)

Máy chủ ảo Java HotSpot (TM) 64-Bit (bản dựng 24.60-b09, chế độ hỗn hợp)

Mac

phiên bản java "1.7.0_60"

Môi trường thời gian chạy Java (TM) SE (bản dựng 1.7.0_60-b19)

Máy chủ ảo Java HotSpot (TM) 64-Bit (bản dựng 24.60-b09, chế độ hỗn hợp)

Nếu bạn chưa cài đặt Java, hãy cài đặt Bộ phát triển phần mềm Java (SDK) từ https://www.oracle.com/technetwork/java/javase/downloads/index.html. Chúng tôi giả định Java 1.7.0.60 là phiên bản đã cài đặt cho hướng dẫn này.

Bước 2 - Đặt môi trường JAVA

Đặt JAVA_HOMEbiến môi trường để trỏ đến vị trí thư mục cơ sở nơi Java được cài đặt trên máy của bạn. Ví dụ -

Hệ điều hành Đầu ra
các cửa sổ Đặt biến môi trường JAVA_HOME thành C: \ Program Files \ Java \ jdk1.7.0_60
Linux xuất JAVA_HOME = / usr / local / java-current
Mac export JAVA_HOME = / Library / Java / Home

Nối vị trí trình biên dịch Java vào Đường dẫn hệ thống.

Hệ điều hành Đầu ra
các cửa sổ Nối chuỗi “; C: \ Program Files \ Java \ jdk1.7.0.60 \ bin” vào cuối biến hệ thống, Đường dẫn.
Linux xuất PATH =$PATH:$JAVA_HOME / bin /
Mac không yêu cầu

Xác minh cài đặt Java bằng java -version như đã giải thích ở trên.

Bước 3 - Tải xuống Maven Archive

Tải xuống Maven 2.2.1 từ https://maven.apache.org/download.cgi.

Hệ điều hành Tên lưu trữ
các cửa sổ apache-maven-3.3.1-bin.zip
Linux apache-maven-3.3.1-bin.tar.gz
Mac apache-maven-3.3.1-bin.tar.gz

Bước 4 - Giải nén kho lưu trữ Maven

Giải nén kho lưu trữ, vào thư mục bạn muốn cài đặt Maven 3.3.1. Thư mục con apache-maven-3.3.1 sẽ được tạo từ kho lưu trữ.

Hệ điều hành Vị trí (có thể khác tùy theo cài đặt của bạn)
các cửa sổ C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.1
Linux / usr / local / apache-maven
Mac / usr / local / apache-maven

Bước 5 - Đặt các biến môi trường Maven

Thêm M2_HOME, M2, MAVEN_OPTS vào các biến môi trường.

Hệ điều hành Đầu ra
các cửa sổ

Đặt các biến môi trường bằng cách sử dụng thuộc tính hệ thống.

M2_HOME = C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.1 M2 =% M2_HOME% \ bin MAVEN_OPTS = -Xms256m -Xmx512m

Linux

Mở đầu cuối lệnh và đặt các biến môi trường.

export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.1 export M2 = $ M2_HOME / bin

xuất MAVEN_OPTS = -Xms256m -Xmx512m

Mac

Mở đầu cuối lệnh và đặt các biến môi trường.

export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.1

xuất M2 = $ M2_HOME / thùng

xuất MAVEN_OPTS = -Xms256m -Xmx512m

Bước 6 - Thêm Vị trí Thư mục Maven bin vào Đường dẫn Hệ thống

Bây giờ nối biến M2 vào Đường dẫn hệ thống.

Hệ điều hành Đầu ra
các cửa sổ Nối chuỗi;% M2% vào cuối biến hệ thống, Đường dẫn.
Linux xuất PATH =$M2:$CON ĐƯỜNG
Mac xuất PATH =$M2:$CON ĐƯỜNG

Bước 7 - Xác minh cài đặt Maven

Bây giờ hãy mở bảng điều khiển và thực hiện các thao tác sau mvn chỉ huy.

Hệ điều hành Bài tập Chỉ huy
các cửa sổ Mở bảng điều khiển lệnh c: \> mvn --version
Linux Mở Command Terminal $ mvn - phiên bản
Mac Mở thiết bị đầu cuối máy: ~ joseph $ mvn --version

Cuối cùng, xác minh kết quả đầu ra của các lệnh trên, sẽ như sau:

Hệ điều hành Đầu ra
các cửa sổ

Apache Maven 3.3.1 (r801777; 2009-08-07 00: 46: 01 + 0530)

Phiên bản Java: 1.7.0_60

Trang chủ Java: C: \ Program Files \ Java \ jdk1.7.0_60 \ jre

Linux

Apache Maven 3.3.1 (r801777; 2009-08-07 00: 46: 01 + 0530)

Phiên bản Java: 1.7.0_60

Trang chủ Java: C: \ Program Files \ Java \ jdk1.7.0_60 \ jre

Mac

Apache Maven 3.3.1 (r801777; 2009-08-07 00: 46: 01 + 0530)

Phiên bản Java: 1.7.0_60

Trang chủ Java: C: \ Program Files \ Java \ jdk1.7.0_60 \ jre

POM là viết tắt của Project Object Model. Nó là đơn vị công việc cơ bản ở Maven. Nó là một tệp XML nằm trong thư mục cơ sở của dự án dưới dạng pom.xml.

POM chứa thông tin về dự án và các chi tiết cấu hình khác nhau được Maven sử dụng để xây dựng (các) dự án.

POM cũng chứa các mục tiêu và plugin. Trong khi thực hiện một nhiệm vụ hoặc mục tiêu, Maven sẽ tìm POM trong thư mục hiện tại. Nó đọc POM, lấy thông tin cấu hình cần thiết và sau đó thực hiện mục tiêu. Một số cấu hình có thể được chỉ định trong POM như sau:

  • phụ thuộc dự án
  • plugins
  • goals
  • xây dựng hồ sơ
  • phiên bản dự án
  • developers
  • danh sách gửi thư

Trước khi tạo POM, trước tiên chúng ta nên quyết định dự án group (groupId), của nó name (ArtifactId) và phiên bản của nó vì các thuộc tính này giúp xác định duy nhất dự án trong kho lưu trữ.

Ví dụ POM

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.companyname.project-group</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
</project>

Cần lưu ý rằng nên có một tệp POM duy nhất cho mỗi dự án.

  • Tất cả các tệp POM yêu cầu project phần tử và ba trường bắt buộc: groupId, artifactId, version.

  • Ký hiệu dự án trong kho lưu trữ là groupId:artifactId:version.

  • Yêu cầu tối thiểu đối với POM -

Sr.No. Nút & Mô tả
1

Project root

Đây là thẻ gốc của dự án. Bạn cần chỉ định các cài đặt giản đồ cơ bản như lược đồ apache và đặc tả w3.org.

2

Model version

Phiên bản mô hình phải là 4.0.0.

3

groupId

Đây là Id của nhóm dự án. Điều này thường là duy nhất giữa một tổ chức hoặc một dự án. Ví dụ, một nhóm ngân hàng com.company.bank có tất cả các dự án liên quan đến ngân hàng.

4

artifactId

Đây là một Id của dự án. Đây thường là tên của dự án. Ví dụ, ngân hàng tiêu dùng. Cùng với groupId, tạo tác xác định vị trí của tạo tác trong kho lưu trữ.

5

version

Đây là phiên bản của dự án. Cùng với groupId, Nó được sử dụng trong kho lưu trữ của một hiện vật để tách các phiên bản khỏi nhau. Ví dụ -

com.company.bank:consumer-banking:1.0

com.company.bank:consumer-banking:1.1.

Super POM

Super POM là POM mặc định của Maven. Tất cả các POM kế thừa từ cha mẹ hoặc mặc định (mặc dù được xác định rõ ràng hay không). POM cơ sở này được gọi làSuper POMvà chứa các giá trị được kế thừa theo mặc định.

Maven sử dụng POM hiệu quả (cấu hình từ cấu hình dự án super pom cộng) để thực hiện mục tiêu có liên quan. Nó giúp các nhà phát triển chỉ định chi tiết cấu hình tối thiểu trong pom.xml của họ. Mặc dù các cấu hình có thể bị ghi đè dễ dàng.

Một cách dễ dàng để xem các cấu hình mặc định của super POM là chạy lệnh sau: mvn help:effective-pom

Tạo một pom.xml trong bất kỳ thư mục nào trên máy tính của bạn. Sử dụng nội dung của pom ví dụ đã đề cập ở trên.

Trong ví dụ dưới đây, Chúng tôi đã tạo một pom.xml trong thư mục C: \ MVN \ project.

Bây giờ hãy mở bảng điều khiển lệnh, truy cập thư mục chứa pom.xml và thực hiện như sau mvn chỉ huy.

C:\MVN\project>mvn help:effective-pom

Maven sẽ bắt đầu xử lý và hiển thị hiệu quả.

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO]    task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]

.....

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------

POM hiệu quả được hiển thị trong bảng điều khiển, sau khi áp dụng kế thừa, nội suy và cấu hình.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ============================================== -->
<!-- -->
<!-- Generated by Maven Help Plugin on 2015-04-09T11:41:51 -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
<!-- -->
<!-- ==============================================-->

<!-- ==============================================-->
<!-- -->
<!-- Effective POM for project -->
<!-- 'com.companyname.project-group:project-name:jar:1.0' -->
<!-- -->
<!-- ============================================== -->

<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/

2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 

http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.project-group</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <build>
      <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
      <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>

      <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
      <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
      <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
      <resources>
         <resource>
            <mergeId>resource-0</mergeId>
            <directory>C:\MVN\project\src\main\resources</directory>
         </resource>
      </resources>
      <testResources>
         <testResource>
            <mergeId>resource-1</mergeId>
            <directory>C:\MVN\project\src\test\resources</directory>
         </testResource>
      </testResources>
      <directory>C:\MVN\project\target</directory>
      <finalName>project-1.0</finalName>
   
      <pluginManagement>
         <plugins>
            <plugin>
               <artifactId>maven-antrun-plugin</artifactId>
               <version>1.3</version>
            </plugin>
            <plugin>
               <artifactId>maven-assembly-plugin<  /artifactId>
               <version>2.2-beta-2</version>
            </plugin>
            <plugin>
               <artifactId>maven-clean-plugin<  /artifactId>
               <version>2.2</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>2.0.2</version>
            </plugin>
            <plugin>
               <artifactId>maven-dependency-plugin</artifactId>     
               <version>2.0</version>
            </plugin>
            <plugin>
               <artifactId>maven-deploy-plugin</artifactId>
               <version>2.4</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-ear-plugin</artifactId>
               <version>2.3.1</version>
            </plugin>
            <plugin>
               <artifactId>maven-ejb-plugin</artifactId>
               <version>2.1</version>
            </plugin>
            <plugin>
               <artifactId>maven-install-plugin</artifactId>
               <version>2.2</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-jar-plugin</artifactId>
               <version>2.2</version>
            </plugin>
            <plugin>
               <artifactId>maven-javadoc-plugin</artifactId>
               <version>2.5</version>
            </plugin>
            <plugin>
               <artifactId>maven-plugin-plugin</artifactId>
               <version>2.4.3</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-rar-plugin</artifactId>
               <version>2.2</version>
            </plugin>
            <plugin>
               <artifactId>maven-release-plugin</artifactId>
               <version>2.0-beta-8</version>
            </plugin>
            <plugin>
               <artifactId>maven-resources-plugin</artifactId>
               <version>2.3</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-site-plugin</artifactId>
               <version>2.0-beta-7</version>
            </plugin>
            <plugin>
               <artifactId>maven-source-plugin</artifactId>
               <version>2.0.4</version>
            </plugin>
            <plugin>
               <artifactId>maven-surefire-plugin</artifactId>
               <version>2.4.3</version>
            </plugin>
            <plugin>
               <artifactId>maven-war-plugin</artifactId>
               <version>2.1-alpha-2</version>
            </plugin>
         </plugins>
      </pluginManagement>
   
      <plugins>
         <plugin>
            <artifactId>maven-help-plugin</artifactId>
            <version>2.1.1</version>
         </plugin>
      </plugins>
   </build>
   
   <repositories>
      <repository>
         <snapshots>
            <enabled>false</enabled>
         </snapshots>
         <id>central</id>
         <name>Maven Repository Switchboard</name>
         <url>http://repo1.maven.org/maven2</url>
      </repository>
   </repositories>
   <pluginRepositories>
      <pluginRepository>
         <releases>
            <updatePolicy>never</updatePolicy>
         </releases>
         <snapshots>
            <enabled>false</enabled>
         </snapshots>
         <id>central</id>
         <name>Maven Plugin Repository</name>
         <url>http://repo1.maven.org/maven2</url>
      </pluginRepository>
   </pluginRepositories>
   <reporting>
      <outputDirectory>C:\MVN\project\target/site</outputDirectory>
   </reporting>
</project>

Trong pom.xml ở trên, bạn có thể thấy cấu trúc thư mục nguồn dự án mặc định, thư mục đầu ra, trình cắm thêm cần thiết, kho lưu trữ, thư mục báo cáo, mà Maven sẽ sử dụng trong khi thực hiện các mục tiêu mong muốn.

Maven pom.xml cũng không bắt buộc phải viết thủ công. Maven cung cấp nhiều plugin archetype để tạo dự án, theo thứ tự, tạo cấu trúc dự án và pom.xml

Build Lifecycle là gì?

Vòng đời xây dựng là một chuỗi các giai đoạn được xác định rõ ràng, xác định thứ tự thực hiện các mục tiêu. Ở đây giai đoạn đại diện cho một giai đoạn trong vòng đời. Như một ví dụ, một điển hìnhMaven Build Lifecycle bao gồm trình tự các giai đoạn sau.

Giai đoạn Xử lý Sự miêu tả
chuẩn bị nguồn lực sao chép tài nguyên Việc sao chép tài nguyên có thể được tùy chỉnh trong giai đoạn này.
xác nhận Xác thực thông tin Xác thực nếu dự án là chính xác và nếu tất cả các thông tin cần thiết có sẵn.
biên dịch biên soạn Việc biên dịch mã nguồn được thực hiện trong giai đoạn này.
Kiểm tra Thử nghiệm Kiểm tra mã nguồn đã biên dịch phù hợp với khung kiểm thử.
gói hàng bao bì Giai đoạn này tạo gói JAR / WAR như được đề cập trong bao bì trong POM.xml.
Tải về cài đặt Giai đoạn này cài đặt gói trong kho lưu trữ maven cục bộ / từ xa.
Triển khai Triển khai Sao chép gói cuối cùng vào kho lưu trữ từ xa.

Luôn luôn có prepost giai đoạn đăng ký goals, phải chạy trước hoặc sau một giai đoạn cụ thể.

Khi Maven bắt đầu xây dựng một dự án, nó sẽ bước qua một chuỗi các giai đoạn xác định và thực hiện các mục tiêu, được đăng ký với từng giai đoạn.

Maven có ba vòng đời tiêu chuẩn sau:

  • clean
  • mặc định (hoặc xây dựng)
  • site

A goalđại diện cho một nhiệm vụ cụ thể góp phần xây dựng và quản lý một dự án. Nó có thể bị ràng buộc với 0 hoặc nhiều giai đoạn xây dựng. Một mục tiêu không bị ràng buộc với bất kỳ giai đoạn xây dựng nào có thể được thực thi bên ngoài vòng đời xây dựng bằng cách gọi trực tiếp.

Thứ tự thực hiện phụ thuộc vào thứ tự mà (các) mục tiêu và (các) giai đoạn xây dựng được gọi. Ví dụ, hãy xem xét lệnh dưới đây. Cáccleanpackage các đối số là các giai đoạn xây dựng trong khi dependency:copy-dependencies là một mục tiêu.

mvn clean dependency:copy-dependencies package

Ở đây, giai đoạn sạch sẽ được thực hiện đầu tiên, tiếp theo làdependency:copy-dependencies goal, và cuối cùng giai đoạn gói sẽ được thực hiện.

Vòng đời sạch

Khi chúng ta thực hiện lệnh post-clean của mvn , Maven gọi ra vòng đời sạch bao gồm các giai đoạn sau.

  • pre-clean
  • clean
  • post-clean

Mục tiêu sạch của Maven (sạch: sạch sẽ) được ràng buộc với giai đoạn sạch trong vòng đời sạch. Nó làclean:cleangoalxóa đầu ra của một bản dựng bằng cách xóa thư mục bản dựng. Do đó, khi lệnh mvn clean thực thi, Maven sẽ xóa thư mục xây dựng.

Chúng tôi có thể tùy chỉnh hành vi này bằng cách đề cập đến các mục tiêu trong bất kỳ giai đoạn nào ở trên của vòng đời sạch.

Trong ví dụ sau, Chúng tôi sẽ đính kèm maven-antrun-plugin: run target vào các giai đoạn trước, sạch và sau sạch. Điều này sẽ cho phép chúng tôi lặp lại các tin nhắn văn bản hiển thị các giai đoạn của vòng đời sạch.

Chúng tôi đã tạo một pom.xml trong thư mục C: \ MVN \ project.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <id>id.pre-clean</id>
                  <phase>pre-clean</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>pre-clean phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.clean</id>
                  <phase>clean</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>clean phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.post-clean</id>
                  <phase>post-clean</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>post-clean phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>
</project>

Bây giờ mở bảng điều khiển lệnh, đi đến thư mục chứa pom.xml và thực hiện như sau mvn chỉ huy.

C:\MVN\project>mvn post-clean

Maven sẽ bắt đầu xử lý và hiển thị tất cả các giai đoạn của vòng đời sạch.

[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: > 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------

Bạn có thể thử điều chỉnh mvn clean lệnh sẽ hiển thị pre-cleanvà sạch sẽ. Không có gì sẽ được thực hiện chopost-clean giai đoạn.

Vòng đời mặc định (hoặc bản dựng)

Đây là vòng đời chính của Maven và được sử dụng để xây dựng ứng dụng. Nó có 21 giai đoạn sau.

Sr.No. Giai đoạn vòng đời & Mô tả
1

validate

Xác nhận xem dự án có đúng hay không và tất cả các thông tin cần thiết đều có sẵn để hoàn tất quá trình xây dựng.

2

initialize

Khởi tạo trạng thái xây dựng, ví dụ thiết lập thuộc tính.

3

generate-sources

Tạo bất kỳ mã nguồn nào được đưa vào giai đoạn biên dịch.

4

process-sources

Xử lý mã nguồn, ví dụ, lọc bất kỳ giá trị nào.

5

generate-resources

Tạo tài nguyên được bao gồm trong gói.

6

process-resources

Sao chép và xử lý các tài nguyên vào thư mục đích, sẵn sàng cho giai đoạn đóng gói.

7

compile

Biên dịch mã nguồn của dự án.

số 8

process-classes

Xử lý hậu kỳ các tệp được tạo từ quá trình biên dịch, chẳng hạn như để thực hiện nâng cao / tối ưu hóa bytecode trên các lớp Java.

9

generate-test-sources

Tạo bất kỳ mã nguồn thử nghiệm nào được đưa vào giai đoạn biên dịch.

10

process-test-sources

Xử lý mã nguồn thử nghiệm, chẳng hạn như lọc bất kỳ giá trị nào.

11

test-compile

Biên dịch mã nguồn thử nghiệm vào thư mục đích thử nghiệm.

12

process-test-classes

Xử lý các tệp được tạo từ quá trình biên dịch tệp mã thử nghiệm.

13

test

Chạy thử nghiệm bằng cách sử dụng khung thử nghiệm đơn vị phù hợp (Junit là một).

14

prepare-package

Thực hiện bất kỳ thao tác nào cần thiết để chuẩn bị một gói hàng trước khi đóng gói thực tế.

15

package

Lấy mã đã biên dịch và đóng gói nó ở định dạng có thể phân phối, chẳng hạn như tệp JAR, WAR hoặc EAR.

16

pre-integration-test

Thực hiện các hành động cần thiết trước khi thực thi các kiểm tra tích hợp. Ví dụ, thiết lập môi trường yêu cầu.

17

integration-test

Xử lý và triển khai gói nếu cần thiết vào một môi trường có thể chạy các thử nghiệm tích hợp.

18

post-integration-test

Thực hiện các hành động được yêu cầu sau khi các thử nghiệm tích hợp đã được thực hiện. Ví dụ, làm sạch môi trường.

19

verify

Chạy bất kỳ lần kiểm tra nào để xác minh gói hàng hợp lệ và đáp ứng tiêu chí chất lượng.

20

install

Cài đặt gói vào kho lưu trữ cục bộ, có thể được sử dụng như một phần phụ thuộc trong các dự án cục bộ khác.

21

deploy

Sao chép gói cuối cùng vào kho lưu trữ từ xa để chia sẻ với các nhà phát triển và dự án khác.

Có một số khái niệm quan trọng liên quan đến Maven Lifecycles, đáng được đề cập đến -

  • Ví dụ: khi một pha được gọi thông qua lệnh Maven mvn compile, chỉ các giai đoạn lên đến và bao gồm giai đoạn đó sẽ thực thi.

  • Các mục tiêu maven khác nhau sẽ bị ràng buộc với các giai đoạn khác nhau của vòng đời Maven tùy thuộc vào loại bao bì (JAR / WAR / EAR).

Trong ví dụ sau, chúng tôi sẽ đính kèm maven-antrun-plugin: run target vào một vài giai đoạn của vòng đời Xây dựng. Điều này sẽ cho phép chúng tôi lặp lại các tin nhắn văn bản hiển thị các giai đoạn của vòng đời.

Chúng tôi đã cập nhật pom.xml trong thư mục C: \ MVN \ project.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <id>id.validate</id>
                  <phase>validate</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>validate phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.compile</id>
                  <phase>compile</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>compile phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.test</id>
                  <phase>test</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>test phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.package</id>
                  <phase>package</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>package phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            
               <execution>
                  <id>id.deploy</id>
                  <phase>deploy</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>deploy phase</echo>
                     </tasks>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>
</project>

Bây giờ hãy mở bảng điều khiển lệnh, truy cập thư mục chứa pom.xml và thực hiện như sau mvn chỉ huy.

C:\MVN\project>mvn compile

Maven sẽ bắt đầu xử lý và hiển thị các giai đoạn của vòng đời xây dựng cho đến giai đoạn biên dịch.

[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [compile]
[INFO] -----------------------------------------------------------------
-
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
[echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered
resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] -----------------------------------------------------------------
-
[INFO] BUILD SUCCESSFUL
[INFO] -----------------------------------------------------------------
-
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] -----------------------------------------------------------------
-

Vòng đời của trang web

Plugin Maven Site thường được sử dụng để tạo tài liệu mới để tạo báo cáo, triển khai trang web, v.v. Nó có các giai đoạn sau:

  • pre-site
  • site
  • post-site
  • site-deploy

Trong ví dụ sau, chúng tôi sẽ đính kèm maven-antrun-plugin:runmục tiêu cho tất cả các giai đoạn của vòng đời Trang web. Điều này sẽ cho phép chúng tôi lặp lại các tin nhắn văn bản hiển thị các giai đoạn của vòng đời.

Chúng tôi đã cập nhật pom.xml trong thư mục C: \ MVN \ project.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <id>id.pre-site</id>
                  <phase>pre-site</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>pre-site phase</echo>
                     </tasks>
                  </configuration>
               </execution>
               
               <execution>
                  <id>id.site</id>
                  <phase>site</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>site phase</echo>
                     </tasks>
                  </configuration>
               </execution>
               
               <execution>
                  <id>id.post-site</id>
                  <phase>post-site</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>post-site phase</echo>
                     </tasks>
                  </configuration>
               </execution>
               
               <execution>
                  <id>id.site-deploy</id>
                  <phase>site-deploy</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>site-deploy phase</echo>
                     </tasks>
                  </configuration>
               </execution>
               
            </executions>
         </plugin>
      </plugins>
   </build>
</project>

Bây giờ mở bảng điều khiển lệnh, truy cập thư mục chứa pom.xml và thực hiện như sau mvn chỉ huy.

C:\MVN\project>mvn site

Maven sẽ bắt đầu xử lý và hiển thị các giai đoạn của vòng đời trang web cho đến giai đoạn trang web.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
[echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]

[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.

[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
[echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------

Xây dựng hồ sơ là gì?

Cấu hình bản dựng là một tập hợp các giá trị cấu hình, có thể được sử dụng để đặt hoặc ghi đè các giá trị mặc định của bản dựng Maven. Sử dụng hồ sơ bản dựng, bạn có thể tùy chỉnh bản dựng cho các môi trường khác nhau, chẳng hạn như môi trường Phát triển v / s Sản xuất.

Cấu hình được chỉ định trong tệp pom.xml bằng cách sử dụng các phần tử ActiveProfiles / cấu hình của nó và được kích hoạt theo nhiều cách. Cấu hình sửa đổi POM tại thời điểm xây dựng và được sử dụng để cung cấp cho các tham số môi trường mục tiêu khác nhau (ví dụ: đường dẫn của máy chủ cơ sở dữ liệu trong môi trường phát triển, thử nghiệm và sản xuất).

Các loại hồ sơ bản dựng

Cấu hình xây dựng chủ yếu có ba loại.

Kiểu Nơi nó được xác định
Mỗi dự án Được xác định trong tệp POM của dự án, pom.xml
Mỗi người dùng Được xác định trong tệp xml cài đặt Maven (% USER_HOME% /. M2 / settings.xml)
Toàn cầu Được xác định trong tệp xml cài đặt chung của Maven (% M2_HOME% / conf / settings.xml)

Kích hoạt hồ sơ

Một Hồ sơ Xây dựng Maven có thể được kích hoạt theo nhiều cách khác nhau.

  • Sử dụng đầu vào bảng điều khiển lệnh một cách rõ ràng.
  • Thông qua cài đặt maven.
  • Dựa trên các biến môi trường (biến Người dùng / Hệ thống).
  • Cài đặt hệ điều hành (ví dụ: họ Windows).
  • Trình bày / thiếu tệp.

Ví dụ về kích hoạt hồ sơ

Hãy để chúng tôi giả sử cấu trúc thư mục sau của dự án của bạn:

Bây giờ, dưới src/main/resources, có ba tệp môi trường cụ thể -

Sr.No. Tên & Mô tả tệp
1

env.properties

cấu hình mặc định được sử dụng nếu không có cấu hình nào được đề cập.

2

env.test.properties

cấu hình kiểm tra khi cấu hình kiểm tra được sử dụng.

3

env.prod.properties

cấu hình sản xuất khi cấu hình sản phẩm được sử dụng.

Kích hoạt hồ sơ rõ ràng

Trong ví dụ sau, chúng tôi sẽ đính kèm maven-antrun-plugin: chạy mục tiêu để kiểm tra giai đoạn. Điều này sẽ cho phép chúng tôi lặp lại tin nhắn văn bản cho các cấu hình khác nhau. Chúng tôi sẽ sử dụng pom.xml để xác định các cấu hình khác nhau và sẽ kích hoạt cấu hình tại bảng điều khiển lệnh bằng lệnh maven.

Giả sử, chúng tôi đã tạo pom.xml sau trong thư mục C: \ MVN \ project.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <profiles>
      <profile>
         <id>test</id>
         <build>
            <plugins>
               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-antrun-plugin</artifactId>
                  <version>1.1</version>
                  <executions>
                     <execution>
                        <phase>test</phase>
                        <goals>
                           <goal>run</goal>
                        </goals>
                        <configuration>
                           <tasks>
                              <echo>Using env.test.properties</echo>
                              <copy file="src/main/resources/env.test.properties"
                                 tofile="${project.build.outputDirectory}
                                 /env.properties"/>
                           </tasks>
                        </configuration>
                     </execution>
                  </executions>
               </plugin>
            </plugins>
         </build>
      </profile>
   </profiles>
</project>

Bây giờ mở bảng điều khiển lệnh, đi đến thư mục chứa pom.xml và thực hiện như sau mvnchỉ huy. Chuyển tên hồ sơ làm đối số bằng tùy chọn -P.

C:\MVN\project>mvn test -Ptest

Maven sẽ bắt đầu xử lý và hiển thị kết quả của hồ sơ xây dựng thử nghiệm.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [test]
[INFO] ------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!

[INFO] Copying 3 resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory C:\MVN\project\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\project\target\surefire-reports

-------------------------------------------------------
T E S T S
-------------------------------------------------------

There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[echo] Using env.test.properties
[INFO] Executed tasks

[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------

[INFO] Total time: 1 second
[INFO] Finished at: Sun Jul 08 14:55:41 IST 2012
[INFO] Final Memory: 8M/64M
[INFO] ------------------------------------------------------------------

Bây giờ như một bài tập, bạn có thể thực hiện các bước sau:

  • Thêm một phần tử hồ sơ khác vào phần tử hồ sơ của pom.xml (sao chép phần tử hồ sơ hiện có và dán nó vào nơi các phần tử hồ sơ kết thúc).

  • Cập nhật id của phần tử hồ sơ này từ thử nghiệm thành bình thường.

  • Cập nhật phần tác vụ thành echo env.properties và sao chép env.properties vào thư mục đích.

  • Một lần nữa lặp lại ba bước trên, cập nhật id thành prod và phần nhiệm vụ cho env.prod.properties.

  • Đó là tất cả. Bây giờ bạn đã sẵn sàng ba cấu hình xây dựng (bình thường / thử nghiệm / sản phẩm).

Bây giờ mở bảng điều khiển lệnh, đi đến thư mục chứa pom.xml và thực hiện như sau mvncác lệnh. Chuyển tên hồ sơ làm đối số bằng tùy chọn -P.

C:\MVN\project>mvn test -Pnormal

C:\MVN\project>mvn test -Pprod

Kiểm tra đầu ra của bản dựng để xem sự khác biệt.

Kích hoạt cấu hình qua Cài đặt Maven

Mở Maven settings.xml tệp có sẵn trong thư mục% USER_HOME% /. m2 nơi %USER_HOME%đại diện cho thư mục chính của người dùng. Nếu tệp settings.xml không có ở đó, hãy tạo một tệp mới.

Thêm hồ sơ thử nghiệm làm hồ sơ hoạt động bằng cách sử dụng nút Hồ sơ đang hoạt động như được minh họa bên dưới trong ví dụ.

<settings xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <mirrors>
      <mirror>
         <id>maven.dev.snaponglobal.com</id>
         <name>Internal Artifactory Maven repository</name>
         <url>http://repo1.maven.org/maven2/</url>
         <mirrorOf>*</mirrorOf>
      </mirror>
   </mirrors>
   <activeProfiles>
      <activeProfile>test</activeProfile>
   </activeProfiles>
</settings>

Bây giờ mở bảng điều khiển lệnh, đi đến thư mục chứa pom.xml và thực hiện như sau mvnchỉ huy. Không chuyển tên hồ sơ bằng tùy chọn -P. Maven sẽ hiển thị kết quả của hồ sơ thử nghiệm là một hồ sơ đang hoạt động.

C:\MVN\project>mvn test

Kích hoạt cấu hình thông qua các biến môi trường

Bây giờ, hãy xóa hồ sơ hoạt động khỏi maven settings.xml và cập nhật hồ sơ thử nghiệm được đề cập trong pom.xml. Thêm phần tử kích hoạt vào phần tử hồ sơ như hình dưới đây.

Hồ sơ kiểm tra sẽ kích hoạt khi thuộc tính hệ thống "env" được chỉ định với giá trị "kiểm tra". Tạo một biến môi trường "env" và đặt giá trị của nó là "test".

<profile>
   <id>test</id>
   <activation>
      <property>
         <name>env</name>
         <value>test</value>
      </property>
   </activation>
</profile>

Hãy mở bảng điều khiển lệnh, đi đến thư mục chứa pom.xml và thực hiện như sau mvn chỉ huy.

C:\MVN\project>mvn test

Kích hoạt cấu hình qua hệ điều hành

Phần tử kích hoạt để bao gồm chi tiết hệ điều hành như hình dưới đây. Cấu hình kiểm tra này sẽ kích hoạt khi hệ thống là windows XP.

<profile>
   <id>test</id>
   <activation>
      <os>
         <name>Windows XP</name>
         <family>Windows</family>
         <arch>x86</arch>
         <version>5.1.2600</version>
      </os>
   </activation>
</profile>

Bây giờ mở bảng điều khiển lệnh, đi đến thư mục chứa pom.xml và thực hiện như sau mvncác lệnh. Không chuyển tên hồ sơ bằng tùy chọn -P. Maven sẽ hiển thị kết quả của hồ sơ thử nghiệm là một hồ sơ đang hoạt động.

C:\MVN\project>mvn test

Kích hoạt hồ sơ qua tệp hiện tại / bị thiếu

Bây giờ phần tử kích hoạt để bao gồm các chi tiết hệ điều hành như hình dưới đây. Hồ sơ kiểm tra sẽ kích hoạt khitarget/generated-sources/axistools/wsdl2java/com/companyname/group bị mất tích.

<profile>
   <id>test</id>
   <activation>
      <file>
         <missing>target/generated-sources/axistools/wsdl2java/
           com/companyname/group</missing>
      </file>
   </activation>
</profile>

Bây giờ mở bảng điều khiển lệnh, đi đến thư mục chứa pom.xml và thực hiện như sau mvncác lệnh. Không chuyển tên hồ sơ bằng tùy chọn -P. Maven sẽ hiển thị kết quả của hồ sơ thử nghiệm là một hồ sơ đang hoạt động.

C:\MVN\project>mvn test

Kho lưu trữ Maven là gì?

Theo thuật ngữ của Maven, kho lưu trữ là một thư mục nơi lưu trữ tất cả các lọ dự án, lọ thư viện, plugin hoặc bất kỳ hiện vật cụ thể nào khác của dự án và có thể được Maven sử dụng dễ dàng.

Kho lưu trữ Maven có ba loại. Hình minh họa sau đây sẽ cung cấp một ý tưởng liên quan đến ba loại này.

  • local
  • central
  • remote

Kho lưu trữ cục bộ

Kho lưu trữ cục bộ Maven là vị trí thư mục trên máy của bạn. Nó được tạo khi bạn chạy bất kỳ lệnh maven nào lần đầu tiên.

Kho lưu trữ cục bộ Maven lưu giữ tất cả các phụ thuộc dự án của bạn (lọ thư viện, lọ plugin, v.v.). Khi bạn chạy bản dựng Maven, thì Maven sẽ tự động tải tất cả các lọ phụ thuộc vào kho lưu trữ cục bộ. Nó giúp tránh tham chiếu đến các phụ thuộc được lưu trữ trên máy từ xa mỗi khi xây dựng một dự án.

Kho lưu trữ cục bộ Maven theo mặc định được Maven tạo trong thư mục% USER_HOME%. Để ghi đè vị trí mặc định, hãy đề cập đến một đường dẫn khác trong tệp Maven settings.xml có sẵn tại thư mục% M2_HOME% \ conf.

<settings xmlns = "http://maven.apache.org/SETTINGS/1.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/SETTINGS/1.0.0 
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <localRepository>C:/MyLocalRepository</localRepository>
</settings>

Khi bạn chạy lệnh Maven, Maven sẽ tải các phần phụ thuộc vào đường dẫn tùy chỉnh của bạn.

Kho trung tâm

Kho lưu trữ trung tâm Maven là kho lưu trữ do cộng đồng Maven cung cấp. Nó chứa một số lượng lớn các thư viện thường được sử dụng.

Khi Maven không tìm thấy bất kỳ sự phụ thuộc nào trong kho lưu trữ cục bộ, nó sẽ bắt đầu tìm kiếm trong kho lưu trữ trung tâm bằng cách sử dụng URL sau: https://repo1.maven.org/maven2/

Các khái niệm chính của kho lưu trữ Trung tâm như sau:

  • Kho này được quản lý bởi cộng đồng Maven.
  • Nó không bắt buộc phải được cấu hình.
  • Nó yêu cầu truy cập internet để tìm kiếm.

Để duyệt nội dung của kho lưu trữ maven trung tâm, cộng đồng maven đã cung cấp một URL - https://search.maven.org/#browse. Sử dụng thư viện này, một nhà phát triển có thể tìm kiếm tất cả các thư viện có sẵn trong kho lưu trữ trung tâm.

Kho lưu trữ từ xa

Đôi khi, Maven cũng không tìm thấy sự phụ thuộc được đề cập trong kho lưu trữ trung tâm. Sau đó, nó dừng quá trình xây dựng và xuất thông báo lỗi tới bảng điều khiển. Để ngăn chặn tình huống đó, Maven cung cấp khái niệmRemote Repository, là kho lưu trữ tùy chỉnh của riêng nhà phát triển chứa các thư viện bắt buộc hoặc các lọ dự án khác.

Ví dụ: sử dụng POM.xml được đề cập dưới đây, Maven sẽ tải xuống phụ thuộc (không có sẵn trong kho lưu trữ trung tâm) từ Kho lưu trữ từ xa được đề cập trong cùng một pom.xml.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <dependencies>
      <dependency>
         <groupId>com.companyname.common-lib</groupId>
         <artifactId>common-lib</artifactId>
         <version>1.0.0</version>
      </dependency>
   <dependencies>
   <repositories>
      <repository>
         <id>companyname.lib1</id>
         <url>http://download.companyname.org/maven2/lib1</url>
      </repository>
      <repository>
         <id>companyname.lib2</id>
         <url>http://download.companyname.org/maven2/lib2</url>
      </repository>
   </repositories>
</project>

Trình tự tìm kiếm phụ thuộc Maven

Khi chúng tôi thực hiện các lệnh xây dựng Maven, Maven bắt đầu tìm kiếm các thư viện phụ thuộc theo trình tự sau:

  • Step 1 - Tìm kiếm phụ thuộc trong local repository, nếu không tìm thấy thì chuyển sang bước 2 khác thực hiện các xử lý tiếp theo.

  • Step 2 - Tìm kiếm phụ thuộc trong kho lưu trữ trung tâm, nếu không tìm thấy và kho lưu trữ / kho lưu trữ từ xa được / được đề cập thì chuyển sang bước 4. Khác nó được tải xuống kho lưu trữ cục bộ để tham khảo trong tương lai.

  • Step 3 - Nếu một kho lưu trữ từ xa chưa được đề cập, Maven chỉ cần dừng xử lý và ném lỗi (Không thể tìm thấy phụ thuộc).

  • Step 4- Tìm kiếm phụ thuộc trong kho lưu trữ từ xa hoặc các kho lưu trữ, nếu được tìm thấy thì nó được tải xuống kho lưu trữ cục bộ để tham khảo trong tương lai. Nếu không, Maven ngừng xử lý và báo lỗi (Không thể tìm thấy phần phụ thuộc).

Maven Plugins là gì?

Maven thực sự là một khung thực thi plugin, nơi mọi tác vụ thực sự được thực hiện bởi các plugin. Maven Plugins thường được sử dụng để -

  • tạo tệp jar
  • tạo hồ sơ chiến tranh
  • biên dịch các tệp mã
  • kiểm tra đơn vị mã
  • tạo tài liệu dự án
  • tạo báo cáo dự án

Một plugin thường cung cấp một tập hợp các mục tiêu, có thể được thực thi bằng cú pháp sau:

mvn [plugin-name]:[goal-name]

Ví dụ: một dự án Java có thể được biên dịch với mục tiêu biên dịch của maven-compiler-plugin bằng cách chạy lệnh sau.

mvn compiler:compile

Các loại plugin

Maven cung cấp hai loại Plugin sau:

Sr.No. Loại & Mô tả
1

Build plugins

Chúng thực thi trong quá trình xây dựng và phải được định cấu hình trong phần tử <build /> của pom.xml.

2

Reporting plugins

Chúng thực thi trong quá trình tạo trang web và chúng phải được định cấu hình trong phần tử <báo cáo /> của pom.xml.

Sau đây là danh sách một số plugin phổ biến:

Sr.No. Plugin & Mô tả
1

clean

Dọn dẹp mục tiêu sau khi xây dựng. Xóa thư mục đích.

2

compiler

Biên dịch các tệp nguồn Java.

3

surefire

Chạy các bài kiểm tra đơn vị JUnit. Tạo báo cáo thử nghiệm.

4

jar

Tạo tệp JAR từ dự án hiện tại.

5

war

Tạo tệp WAR từ dự án hiện tại.

6

javadoc

Tạo Javadoc cho dự án.

7

antrun

Chạy một tập hợp các nhiệm vụ kiến ​​từ bất kỳ giai đoạn nào được đề cập đến của bản dựng.

Example

Chúng tôi đã sử dụng maven-antrun-pluginrộng rãi trong các ví dụ của chúng tôi để in dữ liệu trên bảng điều khiển. Tham khảo chương Xây dựng hồ sơ. Hãy để chúng tôi hiểu nó theo cách tốt hơn và tạo một pom.xml trong thư mục C: \ MVN \ project.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <id>id.clean</id>
                  <phase>clean</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <tasks>
                        <echo>clean phase</echo>
                     </tasks>
                  </configuration>
               </execution>     
            </executions>
         </plugin>
      </plugins>
   </build>
</project>

Tiếp theo, mở bảng điều khiển lệnh và đi đến thư mục chứa pom.xml và thực hiện như sau mvn chỉ huy.

C:\MVN\project>mvn clean

Maven sẽ bắt đầu xử lý và hiển thị giai đoạn sạch của vòng đời sạch.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
     [echo] clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------

Ví dụ trên minh họa các khái niệm chính sau:

  • Các plugin được chỉ định trong pom.xml bằng cách sử dụng phần tử plugin.

  • Mỗi plugin có thể có nhiều mục tiêu.

  • Bạn có thể xác định phase từ nơi plugin sẽ bắt đầu xử lý bằng cách sử dụng phần tử phase của nó. Chúng tôi đã sử dụngclean giai đoạn.

  • Bạn có thể cấu hình các tác vụ được thực thi bằng cách ràng buộc chúng với các mục tiêu của plugin. Chúng tôi đã ràng buộcecho nhiệm vụ với runmục tiêu của maven-antrun-plugin .

  • Sau đó, Maven sẽ tải xuống plugin nếu không có sẵn trong kho lưu trữ cục bộ và bắt đầu xử lý.

Maven sử dụng archetypeplugin để tạo dự án. Để tạo một ứng dụng java đơn giản, chúng tôi sẽ sử dụng plugin maven-archetype-quickstart. Trong ví dụ dưới đây, chúng tôi sẽ tạo một dự án ứng dụng java dựa trên maven trong thư mục C: \ MVN.

Hãy mở bảng điều khiển lệnh, chuyển đến thư mục C: \ MVN và thực hiện các thao tác sau mvn chỉ huy.

C:\MVN>mvn archetype:generate
-DgroupId = com.companyname.bank 
-DartifactId = consumerBanking 
-DarchetypeArtifactId = maven-archetype-quickstart 
-DinteractiveMode = false

Maven sẽ bắt đầu xử lý và sẽ tạo cấu trúc dự án ứng dụng java hoàn chỉnh.

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] -------------------------------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------

[INFO] Parameter: groupId, Value: com.companyname.bank
[INFO] Parameter: packageName, Value: com.companyname.bank
[INFO] Parameter: package, Value: com.companyname.bank
[INFO] Parameter: artifactId, Value: consumerBanking
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT

[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\consumerBanking
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 14 seconds
[INFO] Finished at: Tue Jul 10 15:38:58 IST 2012
[INFO] Final Memory: 21M/124M
[INFO] ------------------------------------------------------------------

Bây giờ vào thư mục C: / MVN. Bạn sẽ thấy một dự án ứng dụng java đã được tạo, có tên là Ngân hàng tiêu dùng (như được chỉ định trongfactId). Maven sử dụng bố cục thư mục tiêu chuẩn như hình dưới đây -

Sử dụng ví dụ trên, chúng ta có thể hiểu các khái niệm chính sau:

Sr.No. Cấu trúc & Mô tả Thư mục
1

consumerBanking

chứa thư mục src và pom.xml

2

src/main/java

chứa các tệp mã java theo cấu trúc gói (com / companyName / bank).

3

src/main/test

chứa các tệp mã java thử nghiệm theo cấu trúc gói (com / companyName / bank).

4

src/main/resources

nó chứa các tệp hình ảnh / thuộc tính (Trong ví dụ trên, chúng ta cần tạo cấu trúc này theo cách thủ công).

Nếu quan sát, bạn sẽ thấy rằng Maven cũng đã tạo một tệp Nguồn Java mẫu và tệp Java Test. Mở thư mục C: \ MVN \ ConsumerBanking \ src \ main \ java \ com \ companyname \ bank, bạn sẽ thấy App.java.

package com.companyname.bank;

/**
 * Hello world!
 *
 */
public class App {
   public static void main( String[] args ){
      System.out.println( "Hello World!" );
   }
}

Mở thư mục C: \ MVN \ ConsumerBanking \ src \ test \ java \ com \ companyname \ bank để xem AppTest.java.

package com.companyname.bank;

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

/**
 * Unit test for simple App.
 */
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 );
   }
}

Các nhà phát triển được yêu cầu đặt các tệp của họ như đã đề cập trong bảng trên và Maven xử lý tất cả các phức tạp liên quan đến việc xây dựng.

Trong chương tiếp theo, chúng ta sẽ thảo luận về cách xây dựng và kiểm tra dự án bằng Maven Build and Test Project.

Những gì chúng ta đã học trong chương Tạo dự án là cách tạo một ứng dụng Java bằng Maven. Bây giờ chúng ta sẽ xem cách xây dựng và thử nghiệm ứng dụng.

Đi tới thư mục C: / MVN nơi bạn đã tạo ứng dụng java của mình. MởconsumerBankingthư mục. Bạn sẽ thấyPOM.xml tập tin với các nội dung sau.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
      </dependency>
   </dependencies>  
</project>

Ở đây bạn có thể thấy, Maven đã thêm Junit làm khung thử nghiệm. Theo mặc định, Maven thêm một tệp nguồnApp.java và một tệp thử nghiệm AppTest.java trong cấu trúc thư mục mặc định của nó, như đã thảo luận trong chương trước.

Hãy mở bảng điều khiển lệnh, truy cập thư mục C: \ MVN \ ConsumerBanking và thực hiện như sau mvn chỉ huy.

C:\MVN\consumerBanking>mvn clean package

Maven sẽ bắt đầu xây dựng dự án.

[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\consumerBanking\target
[INFO] [resources:resources {execution: default-resources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to C:\MVN\consumerBanking\target\classes
[INFO] [resources:testResources {execution: default-testResources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory C:\MVN\consumerBanking\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\consumerBanking\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\consumerBanking\target\surefire-reports

-----------------------------------------------------
T E S T S
-----------------------------------------------------

Running com.companyname.bank.AppTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\consumerBanking\target\
consumerBanking-1.0-SNAPSHOT.jar

[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------

[INFO] Total time: 2 seconds
[INFO] Finished at: Tue Jul 10 16:52:18 IST 2012
[INFO] Final Memory: 16M/89M
[INFO]-----------------------------------------------

Bạn đã xây dựng dự án của mình và tạo tệp jar cuối cùng, sau đây là các khái niệm học tập chính -

  • Chúng tôi cung cấp cho maven hai mục tiêu, đầu tiên là làm sạch thư mục đích (sạch) và sau đó đóng gói đầu ra xây dựng dự án dưới dạng jar (gói).

  • Jar được đóng gói có sẵn trong thư mục tiêu dùng ConsumerBanking \ target như là ConsumerBanking-1.0-SNAPSHOT.jar.

  • Báo cáo thử nghiệm có sẵn trong thư mục ConsumerBanking \ target \ surefire-báo cáo.

  • Maven biên dịch (các) tệp mã nguồn và sau đó kiểm tra (các) tệp mã nguồn.

  • Sau đó, Maven chạy các trường hợp thử nghiệm.

  • Cuối cùng, Maven tạo gói.

Bây giờ mở bảng điều khiển lệnh, truy cập thư mục C: \ MVN \ ConsumerBanking \ target \ class và thực hiện lệnh java sau.

>java com.companyname.bank.App

Bạn sẽ thấy kết quả như sau:

Hello World!

Thêm tệp nguồn Java

Hãy xem cách chúng tôi có thể thêm các tệp Java bổ sung trong dự án của mình. Mở thư mục C: \ MVN \ ConsumerBanking \ src \ main \ java \ com \ companyname \ bank, tạo lớp Util trong đó là Util.java.

package com.companyname.bank;

public class Util {
   public static void printMessage(String message){
      System.out.println(message);
   }
}

Cập nhật lớp Ứng dụng để sử dụng lớp Util.

package com.companyname.bank;

/**
   * Hello world!
   *
*/

public class App {
   public static void main( String[] args ){
      Util.printMessage("Hello World!");
   }
}

Bây giờ hãy mở bảng điều khiển lệnh, truy cập C:\MVN\consumerBanking thư mục và thực thi những điều sau mvn chỉ huy.

>mvn clean compile

Sau khi xây dựng Maven thành công, hãy chuyển đến thư mục C: \ MVN \ ConsumerBanking \ target \ class và thực hiện lệnh java sau.

>java -cp com.companyname.bank.App

Bạn sẽ thấy kết quả như sau:

Hello World!

Như bạn đã biết, Maven thực hiện việc quản lý phụ thuộc bằng cách sử dụng khái niệm Kho lưu trữ. Nhưng điều gì sẽ xảy ra nếu phụ thuộc không có sẵn trong bất kỳ kho lưu trữ từ xa và kho lưu trữ trung tâm nào? Maven cung cấp câu trả lời cho tình huống như vậy bằng cách sử dụng khái niệmExternal Dependency.

Ví dụ: chúng ta hãy thực hiện các thay đổi sau đối với dự án được tạo trong chương 'Tạo dự án Java'.

  • Thêm vào lib vào thư mục src.

  • Sao chép bất kỳ jar nào vào thư mục lib. Chúng tôi đã sử dụngldapjdk.jar, là một thư viện trợ giúp cho các hoạt động LDAP.

Bây giờ cấu trúc dự án của chúng ta sẽ giống như sau:

Ở đây bạn đang có thư viện của riêng mình, dành riêng cho dự án, đây là trường hợp thông thường và nó chứa các lọ, có thể không có sẵn trong bất kỳ kho lưu trữ nào để maven tải xuống. Nếu mã của bạn đang sử dụng thư viện này với Maven, thì bản dựng Maven sẽ không thành công vì nó không thể tải xuống hoặc tham khảo thư viện này trong giai đoạn biên dịch.

Để xử lý tình huống, hãy thêm phần phụ thuộc bên ngoài này vào maven pom.xml bằng cách sử dụng cách sau.

<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.bank</groupId>
   <artifactId>consumerBanking</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>consumerBanking</name>
   <url>http://maven.apache.org</url>

   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>ldapjdk</groupId>
         <artifactId>ldapjdk</artifactId>
         <scope>system</scope>
         <version>1.0</version>
         <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
      </dependency>
   </dependencies>

</project>

Nhìn vào phần tử phụ thuộc thứ hai trong phần phụ thuộc trong ví dụ trên, phần tử này làm rõ các khái niệm chính sau đây về External Dependency.

  • Các phụ thuộc bên ngoài (vị trí jar thư viện) có thể được định cấu hình trong pom.xml theo cách tương tự như các phụ thuộc khác.

  • Chỉ định groupId giống như tên của thư viện.

  • Chỉ định ArtifactId giống như tên của thư viện.

  • Chỉ định phạm vi là hệ thống.

  • Chỉ định đường dẫn hệ thống liên quan đến vị trí dự án.

Hy vọng bây giờ bạn đã rõ về các phụ thuộc bên ngoài và bạn sẽ có thể chỉ định các phụ thuộc bên ngoài trong dự án Maven của mình.

Hướng dẫn này sẽ dạy bạn cách tạo tài liệu của ứng dụng trong một lần. Vì vậy, hãy bắt đầu, đi đến thư mục C: / MVN nơi bạn đã tạo java của mìnhconsumerBankingứng dụng bằng cách sử dụng các ví dụ được đưa ra trong các chương trước. MởconsumerBanking thư mục và thực hiện như sau mvn chỉ huy.

C:\MVN>mvn site

Maven sẽ bắt đầu xây dựng dự án.

[INFO] Scanning for projects...
[INFO]-----------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [site]
[INFO]-----------------------------------------------
[INFO] [site:site {execution: default-site}]
[INFO] artifact org.apache.maven.skins:maven-default-skin:
checking for updates from central

[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.

[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------

[INFO] Total time: 16 seconds
[INFO] Finished at: Wed Jul 11 18:11:18 IST 2012
[INFO] Final Memory: 23M/148M
[INFO]-----------------------------------------------

Tài liệu dự án của bạn hiện đã sẵn sàng. Maven đã tạo một trang trong thư mục đích.

Mở thư mục C: \ MVN \ ConsumerBanking \ target \ site. Nhấp vào index.html để xem tài liệu.

Maven tạo tài liệu bằng cách sử dụng một công cụ xử lý tài liệu có tên là Doxia , công cụ này đọc nhiều định dạng nguồn thành một mô hình tài liệu chung. Để viết tài liệu cho dự án của mình, bạn có thể viết nội dung của mình theo một số định dạng thường được sử dụng sau do Doxia phân tích cú pháp.

Định dạng tên Sự miêu tả Tài liệu tham khảo
XDoc Định dạng tài liệu A Maven 1.x

https://jakarta.apache.org/site

FML Được sử dụng cho các tài liệu Câu hỏi thường gặp

https://maven.apache.org

Maven cung cấp cho người dùng một danh sách rất lớn các loại mẫu dự án khác nhau (614 số) sử dụng khái niệm Archetype. Maven giúp người dùng nhanh chóng bắt đầu một dự án java mới bằng lệnh sau.

mvn archetype:generate

Archetype là gì?

Archetype là một plugin Maven có nhiệm vụ tạo cấu trúc dự án theo mẫu của nó. Chúng tôi sẽ sử dụng plugin quickstart archetype để tạo một ứng dụng java đơn giản tại đây.

Sử dụng Mẫu dự án

Hãy mở bảng điều khiển lệnh, đi tới C:\ > MVN thư mục và thực thi những điều sau mvn chỉ huy.

C:\MVN>mvn archetype:generate

Maven sẽ bắt đầu xử lý và yêu cầu chọn nguyên mẫu cần thiết.

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
...

600: remote −> org.trailsframework:trails-archetype (-)
601: remote −> org.trailsframework:trails-secure-archetype (-)
602: remote −> org.tynamo:tynamo-archetype (-)
603: remote −> org.wicketstuff.scala:wicket-scala-archetype (-)
604: remote −> org.wicketstuff.scala:wicketstuff-scala-archetype

Basic setup for a project that combines Scala and Wicket,
depending on the Wicket-Scala project.
Includes an example Specs test.)

605: remote −> org.wikbook:wikbook.archetype (-)
606: remote −> org.xaloon.archetype:xaloon-archetype-wicket-jpa-glassfish (-)
607: remote −> org.xaloon.archetype:xaloon-archetype-wicket-jpa-spring (-)
608: remote −> org.xwiki.commons:xwiki-commons-component-archetype
   (Make it easy to create a maven project for creating XWiki Components.)
609: remote −> org.xwiki.rendering:xwiki-rendering-archetype-macro
   (Make it easy to create a maven project for creating XWiki Rendering Macros.)
610: remote −> org.zkoss:zk-archetype-component (The ZK Component archetype)
611: remote −> org.zkoss:zk-archetype-webapp (The ZK wepapp archetype)
612: remote −> ru.circumflex:circumflex-archetype (-)
613: remote −> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-)
614: remote −> sk.seges.sesam:sesam-annotation-archetype (-)
Choose a number or apply filter
(format: [groupId:]artifactId, case sensitive contains): 203:

Nhấn Enter để chọn tùy chọn mặc định (203: maven-archetype-quickstart)

Maven sẽ yêu cầu phiên bản nguyên mẫu cụ thể.

Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6:

Nhấn Enter để chọn tùy chọn mặc định (6: maven-archetype-quickstart: 1.1)

Maven sẽ hỏi chi tiết dự án. Nhập chi tiết dự án theo yêu cầu. Nhấn Enter nếu giá trị mặc định được cung cấp. Bạn có thể ghi đè chúng bằng cách nhập giá trị của riêng bạn.

Define value for property 'groupId': : com.companyname.insurance
Define value for property 'artifactId': : health
Define value for property 'version': 1.0-SNAPSHOT:
Define value for property 'package': com.companyname.insurance:

Maven sẽ yêu cầu xác nhận chi tiết dự án. Nhấn enter hoặc nhấn Y.

Confirm properties configuration:
groupId: com.companyname.insurance
artifactId: health
version: 1.0-SNAPSHOT
package: com.companyname.insurance
Y:

Bây giờ Maven sẽ bắt đầu tạo cấu trúc dự án và sẽ hiển thị như sau:

[INFO]-----------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO]-----------------------------------------------

[INFO] Parameter: groupId, Value: com.companyname.insurance
[INFO] Parameter: packageName, Value: com.companyname.insurance
[INFO] Parameter: package, Value: com.companyname.insurance
[INFO] Parameter: artifactId, Value: health
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT

[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\health
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 4 minutes 12 seconds
[INFO] Finished at: Fri Jul 13 11:10:12 IST 2012
[INFO] Final Memory: 20M/90M
[INFO]-----------------------------------------------

Dự án đã tạo

Bây giờ đi đến C:\ > MVNdanh mục. Bạn sẽ thấy một dự án ứng dụng java được tạo, có tênhealth, được cho là artifactIdtại thời điểm tạo dự án. Maven sẽ tạo một bố cục thư mục tiêu chuẩn cho dự án như hình dưới đây -

Đã tạo POM.xml

Maven tạo tệp POM.xml cho dự án như được liệt kê bên dưới:

<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.insurance</groupId>
   <artifactId>health</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>health</name>
   <url>http://maven.apache.org</url>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <dependencies>
      <dependency>
      <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

Đã tạo App.java

Maven tạo tệp nguồn java mẫu, App.java cho dự án như được liệt kê bên dưới -

Vị trí: C:\ > MVN > health > src > main > java > com > companyname > insurance > App.java.

package com.companyname.insurance;

/**
   * Hello world!
   *
*/
public class App {
   public static void main( String[] args ) {
      System.out.println( "Hello World!" );
   }
}

Đã tạo AppTest.java

Maven tạo tệp kiểm tra nguồn java mẫu, AppTest.java cho dự án như được liệt kê bên dưới -

Vị trí: C:\ > MVN > health > src > test > java > com > companyname > insurance > AppTest.java.

package com.companyname.insurance;

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

/**
   * Unit test for simple App.
*/
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 );
   }
}

Bây giờ bạn có thể thấy sức mạnh của Maven. Bạn có thể tạo bất kỳ loại dự án nào bằng cách sử dụng một lệnh trong maven và có thể bắt đầu quá trình phát triển của bạn.

Các kiểu mẫu khác nhau

Sr.No. Mô tả & Tạo tác Archetype
1

maven-archetype-archetype

Một nguyên mẫu, chứa một nguyên mẫu mẫu.

2

maven-archetype-j2ee-simple

Một nguyên mẫu, chứa một ứng dụng J2EE mẫu đơn giản hóa.

3

maven-archetype-mojo

Một archetype, chứa một mẫu plugin Maven mẫu.

4

maven-archetype-plugin

Một kiểu mẫu, chứa một plugin Maven mẫu.

5

maven-archetype-plugin-site

Một kiểu mẫu, chứa một trang web plugin Maven mẫu.

6

maven-archetype-portlet

Một kiểu mẫu, chứa một Portlet JSR-268 mẫu.

7

maven-archetype-quickstart

Một nguyên mẫu, chứa một dự án Maven mẫu.

số 8

maven-archetype-simple

Một nguyên mẫu, chứa một dự án Maven đơn giản.

9

maven-archetype-site

Một nguyên mẫu, chứa một trang Maven mẫu để trình bày một số loại tài liệu được hỗ trợ như APT, XDoc và FML và trình bày cách i18n trang web của bạn.

10

maven-archetype-site-simple

Một nguyên mẫu, chứa một trang Maven mẫu.

11

maven-archetype-webapp

Một nguyên mẫu, chứa một dự án Maven Webapp mẫu.

Một ứng dụng phần mềm lớn thường bao gồm nhiều mô-đun và tình huống phổ biến là nhiều nhóm đang làm việc trên các mô-đun khác nhau của cùng một ứng dụng. Ví dụ: hãy coi một nhóm đang làm việc trên giao diện người dùng của ứng dụng là dự án app-ui (app-ui.jar: 1.0) và họ đang sử dụng dự án dịch vụ dữ liệu (data-service.jar: 1.0).

Bây giờ có thể xảy ra rằng nhóm làm việc trên dịch vụ dữ liệu đang sửa lỗi hoặc cải tiến với tốc độ nhanh chóng và họ đang phát hành thư viện vào kho lưu trữ từ xa hầu như cách ngày.

Bây giờ nếu nhóm dịch vụ dữ liệu tải lên phiên bản mới cách ngày, thì các vấn đề sau sẽ phát sinh:

  • nhóm dịch vụ dữ liệu nên thông báo cho nhóm ứng dụng mỗi khi họ phát hành mã cập nhật.

  • nhóm app-ui yêu cầu cập nhật pom.xml của họ thường xuyên để có được phiên bản cập nhật.

Để xử lý tình huống như vậy, SNAPSHOT khái niệm đi vào hoạt động.

SNAPSHOT là gì?

SNAPSHOT là một phiên bản đặc biệt chỉ ra một bản sao phát triển hiện tại. Không giống như các phiên bản thông thường, Maven kiểm tra phiên bản SNAPSHOT mới trong kho lưu trữ từ xa cho mọi bản dựng.

Giờ đây, nhóm dịch vụ dữ liệu sẽ phát hành SNAPSHOT của mã đã cập nhật của nó mỗi lần vào kho lưu trữ, chẳng hạn như data-service: 1.0-SNAPSHOT, thay thế một jar SNAPSHOT cũ hơn.

Ảnh chụp nhanh so với phiên bản

Trong trường hợp Phiên bản, nếu Maven đã từng tải xuống phiên bản được đề cập, chẳng hạn như data-service: 1.0, nó sẽ không bao giờ cố tải xuống phiên bản 1.0 mới hơn có sẵn trong kho lưu trữ. Để tải xuống mã đã cập nhật, phiên bản dịch vụ dữ liệu được nâng cấp lên 1.1.

Trong trường hợp SNAPSHOT, Maven sẽ tự động tìm nạp SNAPSHOT mới nhất (data-service: 1.0-SNAPSHOT) mỗi khi nhóm app-ui xây dựng dự án của họ.

app-ui pom.xml

app-ui dự án đang sử dụng 1.0-SNAPSHOT của dịch vụ dữ liệu.

<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>app-ui</groupId>
   <artifactId>app-ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <name>health</name>
   <url>http://maven.apache.org</url>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <dependencies>
      <dependency>
      <groupId>data-service</groupId>
         <artifactId>data-service</artifactId>
         <version>1.0-SNAPSHOT</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

dữ liệu-dịch vụ pom.xml

data-service dự án đang phát hành 1.0-SNAPSHOT cho mọi thay đổi nhỏ.

<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>data-service</groupId>
   <artifactId>data-service</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>health</name>
   <url>http://maven.apache.org</url>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
</project>

Mặc dù, trong trường hợp SNAPSHOT, Maven tự động tìm nạp SNAPSHOT mới nhất hàng ngày, bạn có thể buộc maven tải xuống bản dựng ảnh chụp nhanh mới nhất bằng cách sử dụng -U chuyển sang bất kỳ lệnh maven nào.

mvn clean package -U

Hãy mở bảng điều khiển lệnh, đi tới C:\ > MVN > app-ui thư mục và thực thi những điều sau mvn chỉ huy.

C:\MVN\app-ui>mvn clean package -U

Maven sẽ bắt đầu xây dựng dự án sau khi tải xuống SNAPSHOT mới nhất của dịch vụ dữ liệu.

[INFO] Scanning for projects...
[INFO]--------------------------------------------
[INFO] Building consumerBanking
[INFO]    task-segment: [clean, package]
[INFO]--------------------------------------------
[INFO] Downloading data-service:1.0-SNAPSHOT
[INFO] 290K downloaded.
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\app-ui\target
[INFO] [resources:resources {execution: default-resources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\main\resources
[INFO] [compiler:compile {execution:default-compile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\classes
[INFO] [resources:testResources {execution: default-testResources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\app-ui\target\
surefire-reports

--------------------------------------------------
 T E S T S
--------------------------------------------------

Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-ui\target\
app-ui-1.0-SNAPSHOT.jar
[INFO]--------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]--------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: 2015-09-27T12:30:02+05:30
[INFO] Final Memory: 16M/89M
[INFO]------------------------------------------------------------------------

Tự động hóa xây dựng xác định kịch bản trong đó quá trình xây dựng (các) dự án phụ thuộc được bắt đầu sau khi quá trình xây dựng dự án được hoàn thành thành công, để đảm bảo (các) dự án phụ thuộc đó ổn định.

Example

Xem xét một nhóm đang phát triển một dự án bus-core-api trên đó hai dự án khác app-web-uiapp-desktop-ui đang phụ thuộc.

app-web-ui dự án đang sử dụng 1.0-SNAPSHOT của bus-core-api dự án.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>app-web-ui</groupId>
   <artifactId>app-web-ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <dependencies>
      <dependency>
         <groupId>bus-core-api</groupId>
            <artifactId>bus-core-api</artifactId>
            <version>1.0-SNAPSHOT</version>
      </dependency>
   </dependencies>
</project>

app-desktop-ui dự án đang sử dụng 1.0-SNAPSHOT của bus-core-api dự án.

<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>app_desktop_ui</groupId>
   <artifactId>app_desktop_ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <name>app_desktop_ui</name>
   <url>http://maven.apache.org</url>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>bus_core_api</groupId>
         <artifactId>bus_core_api</artifactId>
         <version>1.0-SNAPSHOT</version>
         <scope>system</scope>
         <systemPath>C:\MVN\bus_core_api\target\bus_core_api-1.0-SNAPSHOT.jar</systemPath>
      </dependency>
   </dependencies>
</project>

bus-core-api dự án -

<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>bus_core_api</groupId>
   <artifactId>bus_core_api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>   
</project>

Bây giờ, các đội của app-web-uiapp-desktop-ui các dự án yêu cầu quá trình xây dựng của họ phải bắt đầu bất cứ khi nào bus-core-api thay đổi dự án.

Sử dụng ảnh chụp nhanh, đảm bảo rằng bus-core-api dự án nên được sử dụng nhưng để đáp ứng yêu cầu trên, chúng ta cần phải làm gì đó bổ sung.

Chúng ta có thể tiến hành theo hai cách sau:

  • Thêm mục tiêu sau khi xây dựng trong bus-core-api pom để bắt đầu app-web-uiapp-desktop-ui xây dựng.

  • Sử dụng Máy chủ tích hợp liên tục (CI) như Hudson để quản lý tự động hóa quá trình xây dựng.

Sử dụng Maven

Cập nhật bus-core-api dự án pom.xml.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>bus-core-api</groupId>
   <artifactId>bus-core-api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   <build>
      <plugins>
         <plugin>
         <artifactId>maven-invoker-plugin</artifactId>
         <version>1.6</version>
         <configuration>
            <debug>true</debug>
            <pomIncludes>
               <pomInclude>app-web-ui/pom.xml</pomInclude>
               <pomInclude>app-desktop-ui/pom.xml</pomInclude>
            </pomIncludes>
         </configuration>
         <executions>
            <execution>
               <id>build</id>
               <goals>
                  <goal>run</goal>
               </goals>
            </execution>
         </executions>
         </plugin>
      </plugins>
   <build>
</project>

Hãy mở bảng điều khiển lệnh, đi tới C:\ > MVN > bus-core-api thư mục và thực thi những điều sau mvn chỉ huy.

>mvn clean package -U

Maven sẽ bắt đầu xây dựng dự án bus-core-api.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building bus-core-api
[INFO] task-segment: [clean, package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\bus-core-ui\target\
bus-core-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------

Một lần bus-core-api xây dựng thành công, Maven sẽ bắt đầu xây dựng app-web-ui dự án.

[INFO] ------------------------------------------------------------------
[INFO] Building app-web-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-web-ui\target\
app-web-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------

Một lần app-web-ui xây dựng thành công, Maven sẽ bắt đầu xây dựng app-desktop-ui dự án.

[INFO] ------------------------------------------------------------------
[INFO] Building app-desktop-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-desktop-ui\target\
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------

Sử dụng Dịch vụ Tích hợp Liên tục với Maven

Các nhà phát triển thích sử dụng Máy chủ CI hơn. Không bắt buộc phải cập nhậtbus-core-api dự án, mỗi khi một dự án mới (ví dụ: app-mobile-ui) được thêm vào, vì dự án phụ thuộc vào bus-core-apidự án. Hudsion là một công cụ tích hợp liên tục được viết bằng java, trong một thùng chứa servlet, chẳng hạn như Apache tomcat và máy chủ ứng dụng glassfish. Hudson tự động quản lý tự động hóa xây dựng bằng cách sử dụng quản lý phụ thuộc Maven. Ảnh chụp nhanh sau đây sẽ xác định vai trò của công cụ Hudson.

Hudson coi mỗi dự án xây dựng là một công việc. Khi mã dự án được đăng ký vào SVN (hoặc bất kỳ Công cụ quản lý nguồn nào được ánh xạ tới Hudson), Hudson bắt đầu công việc xây dựng của mình và khi công việc này hoàn thành, nó sẽ tự động bắt đầu các công việc phụ thuộc khác (các dự án phụ thuộc khác).

Trong ví dụ trên, khi bus-core-uimã nguồn được cập nhật trong SVN, Hudson bắt đầu xây dựng. Sau khi xây dựng thành công, Hudson sẽ tự động tìm kiếm các dự án phụ thuộc và bắt đầu xây dựngapp-web-uiapp-desktop-ui các dự án.

Một trong những tính năng cốt lõi của Maven là Quản lý sự phụ thuộc. Quản lý sự phụ thuộc là một nhiệm vụ khó khăn khi chúng ta phải xử lý các dự án nhiều mô-đun (bao gồm hàng trăm mô-đun / dự án con). Maven cung cấp mức độ kiểm soát cao để quản lý các tình huống như vậy.

Khám phá phụ thuộc bắc cầu

Một trường hợp khá thường xuyên xảy ra, khi một thư viện, ví dụ A, phụ thuộc vào thư viện khác, ví dụ B. Trong trường hợp một dự án C khác muốn sử dụng A, thì dự án đó cũng yêu cầu sử dụng thư viện B.

Maven giúp tránh các yêu cầu như vậy để khám phá tất cả các thư viện được yêu cầu. Maven làm như vậy bằng cách đọc các tệp dự án (pom.xml) của các phụ thuộc, tìm ra các phụ thuộc của chúng, v.v.

Chúng ta chỉ cần xác định sự phụ thuộc trực tiếp trong mỗi bản pom dự án. Maven tự động xử lý phần còn lại.

Với sự phụ thuộc bắc cầu, biểu đồ của các thư viện được đưa vào có thể nhanh chóng phát triển ở mức độ lớn. Các trường hợp có thể phát sinh khi có các thư viện trùng lặp. Maven cung cấp một số tính năng để kiểm soát mức độ phụ thuộc bắc cầu.

Sr.No. Sự miêu tả yếu tố
1

Dependency mediation

Xác định phiên bản của phụ thuộc sẽ được sử dụng khi nhiều phiên bản của một cấu phần phần mềm gặp phải. Nếu hai phiên bản phụ thuộc có cùng độ sâu trong cây phụ thuộc, thì phụ thuộc được khai báo đầu tiên sẽ được sử dụng.

2

Dependency management

Trực tiếp chỉ định các phiên bản của tạo tác sẽ được sử dụng khi chúng gặp phải trong các phụ thuộc bắc cầu. Đối với một dự án ví dụ C có thể bao gồm B làm phụ thuộc trong phần Quản lý phụ thuộc của nó và trực tiếp kiểm soát phiên bản B nào sẽ được sử dụng khi nó được tham chiếu.

3

Dependency scope

Bao gồm các phụ thuộc theo giai đoạn hiện tại của bản dựng.

4

Excluded dependencies

Bất kỳ sự phụ thuộc bắc cầu nào cũng có thể bị loại trừ bằng cách sử dụng phần tử "loại trừ". Ví dụ, A phụ thuộc vào B và B phụ thuộc vào C, thì A có thể đánh dấu C là loại trừ.

5

Optional dependencies

Mọi phụ thuộc bắc cầu đều có thể được đánh dấu là tùy chọn bằng cách sử dụng phần tử "tùy chọn". Ví dụ, A phụ thuộc vào B và B phụ thuộc vào C. Bây giờ B đánh dấu C là tùy chọn. Khi đó A sẽ không sử dụng C.

Phạm vi phụ thuộc

Có thể hạn chế Khám phá Phụ thuộc Xuyên bằng nhiều Phạm vi Phụ thuộc khác nhau như được đề cập bên dưới.

Sr.No. Phạm vi & Mô tả
1

compile

Phạm vi này chỉ ra rằng sự phụ thuộc có sẵn trong classpath của dự án. Nó là phạm vi mặc định.

2

provided

Phạm vi này chỉ ra rằng sự phụ thuộc sẽ được cung cấp bởi JDK hoặc web-Server / Container trong thời gian chạy.

3

runtime

Phạm vi này chỉ ra rằng phụ thuộc không cần thiết để biên dịch, nhưng được yêu cầu trong quá trình thực thi.

4

test

Phạm vi này chỉ ra rằng phần phụ thuộc chỉ có sẵn cho các giai đoạn biên dịch và thực thi thử nghiệm.

5

system

Phạm vi này chỉ ra rằng bạn phải cung cấp đường dẫn hệ thống.

6

import

Phạm vi này chỉ được sử dụng khi phụ thuộc thuộc loại pom. Phạm vi này chỉ ra rằng POM được chỉ định nên được thay thế bằng các phụ thuộc trong phần <dependencyManagement> của POM đó.

Quản lý sự phụ thuộc

Thông thường, chúng tôi có một tập hợp các dự án trong một dự án chung. Trong trường hợp này, chúng ta có thể tạo một pom chung có tất cả các phụ thuộc chung và sau đó tạo pom này, thành phần gốc của các pom của dự án con. Ví dụ sau sẽ giúp bạn hiểu khái niệm này.

Sau đây là chi tiết của đồ thị phụ thuộc ở trên:

  • App-UI-WAR phụ thuộc vào App-Core-lib và App-Data-lib.
  • Root là cha của App-Core-lib và App-Data-lib.
  • Root định nghĩa Lib1, lib2, Lib3 là các phụ thuộc trong phần phụ thuộc của nó.

App-UI-WAR

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.groupname</groupId>
   <artifactId>App-UI-WAR</artifactId>
   <version>1.0</version>
   <packaging>war</packaging>
   <dependencies>
      <dependency>
         <groupId>com.companyname.groupname</groupId>
         <artifactId>App-Core-lib</artifactId>
         <version>1.0</version>
      </dependency>
   </dependencies>  
   <dependencies>
      <dependency>
         <groupId>com.companyname.groupname</groupId>
         <artifactId>App-Data-lib</artifactId>
         <version>1.0</version>
      </dependency>
   </dependencies>  
</project>

App-Core-lib

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
      <artifactId>Root</artifactId>
      <groupId>com.companyname.groupname</groupId>
      <version>1.0</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.groupname</groupId>
   <artifactId>App-Core-lib</artifactId>
   <version>1.0</version> 
   <packaging>jar</packaging>
</project>

App-Data-lib

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
      <artifactId>Root</artifactId>
      <groupId>com.companyname.groupname</groupId>
      <version>1.0</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.groupname</groupId>
   <artifactId>App-Data-lib</artifactId>
   <version>1.0</version>   
   <packaging>jar</packaging>
</project>

Root

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.groupname</groupId>
   <artifactId>Root</artifactId>
   <version>1.0</version>
   <packaging>pom</packaging>
   <dependencies>
      <dependency>
         <groupId>com.companyname.groupname1</groupId>
         <artifactId>Lib1</artifactId>
         <version>1.0</version>
      </dependency>
   </dependencies>  
   <dependencies>
      <dependency>
         <groupId>com.companyname.groupname2</groupId>
         <artifactId>Lib2</artifactId>
         <version>2.1</version>
      </dependency>
   </dependencies>  
   <dependencies>
      <dependency>
         <groupId>com.companyname.groupname3</groupId>
         <artifactId>Lib3</artifactId>
         <version>1.1</version>
      </dependency>
   </dependencies>  
</project>

Bây giờ khi chúng tôi xây dựng dự án App-UI-WAR, Maven sẽ khám phá tất cả các yếu tố phụ thuộc bằng cách duyệt qua biểu đồ phụ thuộc và xây dựng ứng dụng.

Từ ví dụ trên, chúng ta có thể học các khái niệm chính sau:

  • Các phụ thuộc chung có thể được đặt tại một nơi duy nhất bằng cách sử dụng khái niệm pom mẹ. Sự phụ thuộc củaApp-Data-libApp-Core-libdự án được liệt kê trong dự án Root (Xem kiểu đóng gói của Root. Nó là POM).

  • Không cần chỉ định Lib1, lib2, Lib3 làm phụ thuộc trong App-UI-WAR. Maven sử dụngTransitive Dependency Mechanism để quản lý chi tiết đó.

Trong phát triển dự án, thông thường quy trình triển khai bao gồm các bước sau:

  • Đăng ký mã từ tất cả dự án đang thực hiện vào SVN (hệ thống kiểm soát phiên bản) hoặc kho mã nguồn và gắn thẻ nó.

  • Tải xuống mã nguồn hoàn chỉnh từ SVN.

  • Xây dựng ứng dụng.

  • Lưu trữ đầu ra bản dựng hoặc tệp WAR hoặc EAR vào một vị trí mạng chung.

  • Lấy tệp từ mạng và triển khai tệp đến nơi sản xuất.

  • Đã cập nhật tài liệu với ngày và số phiên bản cập nhật của ứng dụng.

Báo cáo vấn đề

Thường có nhiều người tham gia vào quá trình triển khai được đề cập ở trên. Một nhóm có thể xử lý việc kiểm tra mã, nhóm khác có thể xử lý việc xây dựng, v.v. Rất có thể bất kỳ bước nào cũng có thể bị bỏ lỡ do các nỗ lực thủ công liên quan và do môi trường nhiều nhóm. Ví dụ: không thể thay thế bản dựng cũ hơn trên máy mạng và nhóm triển khai đã triển khai lại bản dựng cũ hơn.

Giải pháp

Tự động hóa quá trình triển khai bằng cách kết hợp những điều sau:

  • Maven, để xây dựng và phát hành các dự án.
  • SubVersion, kho mã nguồn, để quản lý mã nguồn.
  • Trình quản lý kho lưu trữ từ xa (Jfrog / Nexus) để quản lý các tệp nhị phân của dự án.

Cập nhật dự án POM.xml

Chúng tôi sẽ sử dụng plugin Maven Release để tạo quy trình phát hành tự động.

Ví dụ: dự án bus-core-api POM.xml.

<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>bus-core-api</groupId>
   <artifactId>bus-core-api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging> 
   <scm>
      <url>http://www.svn.com</url>
      <connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/
      Framework</connection>
      <developerConnection>scm:svn:${username}/${password}@localhost:8080:
      common_core_api:1101:code</developerConnection>
   </scm>
   <distributionManagement>
      <repository>
         <id>Core-API-Java-Release</id>
         <name>Release repository</name>
         <url>http://localhost:8081/nexus/content/repositories/
         Core-Api-Release</url>
      </repository>
   </distributionManagement>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.0-beta-9</version>
            <configuration>
               <useReleaseProfile>false</useReleaseProfile>
               <goals>deploy</goals>
               <scmCommentPrefix>[bus-core-api-release-checkin]-<
               /scmCommentPrefix>
            </configuration>
         </plugin>
      </plugins>
   </build>
</project>

Trong Pom.xml, sau đây là các yếu tố quan trọng mà chúng tôi đã sử dụng:

Sr.No. Yếu tố & Mô tả
1

SCM

Định cấu hình vị trí SVN từ nơi Maven sẽ kiểm tra mã nguồn.

2

Repositories

Vị trí nơi WAR / EAR / JAR được xây dựng hoặc bất kỳ hiện vật nào khác sẽ được lưu trữ sau khi tạo mã thành công.

3

Plugin

maven-release-plugin được định cấu hình để tự động hóa quá trình triển khai.

Maven Release Plug-in

Maven thực hiện các nhiệm vụ hữu ích sau đây bằng cách sử dụng maven-release-plugin.

mvn release:clean

Nó làm sạch không gian làm việc trong trường hợp quá trình phát hành cuối cùng không thành công.

mvn release:rollback

Khôi phục các thay đổi đã thực hiện đối với mã và cấu hình không gian làm việc trong trường hợp quá trình phát hành cuối cùng không thành công.

mvn release:prepare

Thực hiện nhiều thao tác, chẳng hạn như -

  • Kiểm tra xem có bất kỳ thay đổi cục bộ nào chưa cam kết hay không.

  • Đảm bảo rằng không có phụ thuộc SNAPSHOT.

  • Thay đổi phiên bản của ứng dụng và xóa SNAPSHOT khỏi phiên bản để phát hành.

  • Cập nhật các tệp tin pom lên SVN.

  • Chạy các trường hợp thử nghiệm.

  • Cam kết các tệp POM đã sửa đổi.

  • Gắn thẻ mã trong lật đổ

  • Tăng số phiên bản và thêm SNAPSHOT để phát hành trong tương lai.

  • Cam kết các tệp POM đã sửa đổi cho SVN.

mvn release:perform

Kiểm tra mã bằng cách sử dụng thẻ đã xác định trước đó và chạy mục tiêu triển khai Maven, để triển khai chiến tranh hoặc tạo tác được xây dựng vào kho lưu trữ.

Hãy mở bảng điều khiển lệnh, đi tới C:\ > MVN >bus-core-api thư mục và thực thi những điều sau mvn chỉ huy.

>mvn release:prepare

Maven sẽ bắt đầu xây dựng dự án. Sau khi xây dựng thành công, hãy chạy phần saumvn chỉ huy.

>mvn release:perform

Sau khi xây dựng thành công, bạn có thể xác minh tệp JAR đã tải lên trong kho lưu trữ của mình.

Chương này hướng dẫn bạn cách quản lý một dự án dựa trên web bằng cách sử dụng Maven. Tại đây bạn sẽ học cách tạo / xây dựng / triển khai và chạy một ứng dụng web.

Tạo ứng dụng web

Để tạo một ứng dụng web java đơn giản, chúng tôi sẽ sử dụng maven-archetype-webappcắm vào. Vì vậy, hãy mở bảng điều khiển lệnh, đi tớiC:\MVN thư mục và thực thi những điều sau mvn chỉ huy.

C:\MVN>mvn archetype:generate 
-DgroupId = com.companyname.automobile 
-DartifactId = trucks
-DarchetypeArtifactId = maven-archetype-webapp 
-DinteractiveMode = false

Maven sẽ bắt đầu xử lý và sẽ tạo cấu trúc dự án ứng dụng java dựa trên web hoàn chỉnh như sau:

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] --------------------------------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] --------------------------------------------------------------------

[INFO] Parameter: groupId, Value: com.companyname.automobile
[INFO] Parameter: packageName, Value: com.companyname.automobile
[INFO] Parameter: package, Value: com.companyname.automobile
[INFO] Parameter: artifactId, Value: trucks
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT

[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\trucks

[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------

[INFO] Total time: 16 seconds
[INFO] Finished at: Tue Jul 17 11:00:00 IST 2012
[INFO] Final Memory: 20M/89M
[INFO] -------------------------------------------------------------------

Bây giờ vào thư mục C: / MVN. Bạn sẽ thấy một dự án ứng dụng java được tạo, có tên là xe tải (như được chỉ định trong ArtifactId) như được chỉ định trong ảnh chụp nhanh sau. Cấu trúc thư mục sau thường được sử dụng cho các ứng dụng web:

Maven sử dụng bố cục thư mục tiêu chuẩn. Sử dụng ví dụ trên, chúng ta có thể hiểu các khái niệm chính sau:

Sr.No. Cấu trúc & Mô tả Thư mục
1

trucks

chứa thư mục src và pom.xml.

2

src/main/webapp

chứa index.jsp và thư mục WEB-INF.

3

src/main/webapp/WEB-INF

chứa web.xml

4

src/main/resources

nó chứa hình ảnh / tệp thuộc tính.

POM.xml

<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.automobile</groupId>
   <artifactId>trucks</artifactId>
   <packaging>war</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>trucks Maven Webapp</name>
   <url>http://maven.apache.org</url>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
       </dependency>
   </dependencies>
   <build>
      <finalName>trucks</finalName>
   </build>
</project>

Nếu quan sát, bạn sẽ thấy rằng Maven cũng đã tạo một tệp Nguồn JSP mẫu.

Mở C:\ > MVN > trucks > src > main > webapp > thư mục để xem index.jsp với mã sau:

<html>
   <body>
      <h2>Hello World!</h2>
   </body>
</html>

Xây dựng ứng dụng web

Hãy mở bảng điều khiển lệnh, chuyển đến thư mục C: \ MVN \ truck và thực hiện như sau mvn chỉ huy.

C:\MVN\trucks>mvn clean package

Maven sẽ bắt đầu xây dựng dự án.

[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building trucks Maven Webapp
[INFO] task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [resources:resources {execution: default-resources}]

[WARNING] Using platform encoding (Cp1252 actually) to
copy filtered resources,i.e. build is platform dependent!

[INFO] Copying 0 resource
[INFO] [compiler:compile {execution: default-compile}]
[INFO] No sources to compile
[INFO] [resources:testResources {execution: default-testResources}]

[WARNING] Using platform encoding (Cp1252 actually) to
copy filtered resources,i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory
C:\MVN\trucks\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] No sources to compile
[INFO] [surefire:test {execution: default-test}]
[INFO] No tests to run.
[INFO] [war:war {execution: default-war}]
[INFO] Packaging webapp
[INFO] Assembling webapp[trucks] in [C:\MVN\trucks\target\trucks]
[INFO] Processing war project
[INFO] Copying webapp resources[C:\MVN\trucks\src\main\webapp]
[INFO] Webapp assembled in[77 msecs]
[INFO] Building war: C:\MVN\trucks\target\trucks.war
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Tue Jul 17 11:22:45 IST 2012
[INFO] Final Memory: 11M/85M
[INFO] -------------------------------------------------------------------

Triển khai ứng dụng web

Bây giờ sao chép trucks.war được tạo ra tại C:\ > MVN > trucks > target > vào thư mục ứng dụng web máy chủ web của bạn và khởi động lại máy chủ web.

Kiểm tra ứng dụng web

Chạy ứng dụng web bằng URL: http://<server-name>:<port-number>/trucks/index.jsp.

Xác minh kết quả đầu ra.

Eclipse cung cấp một plugin m2eclipse tuyệt vời tích hợp liền mạch Maven và Eclipse với nhau.

Một số tính năng của m2eclipse được liệt kê dưới đây:

  • Bạn có thể chạy các mục tiêu Maven từ Eclipse.

  • Bạn có thể xem đầu ra của các lệnh Maven bên trong Eclipse, bằng cách sử dụng bảng điều khiển của riêng nó.

  • Bạn có thể cập nhật các phụ thuộc maven với IDE.

  • Bạn có thể khởi chạy các bản dựng Maven từ bên trong Eclipse.

  • Nó thực hiện việc quản lý phụ thuộc cho đường dẫn xây dựng Eclipse dựa trên pom.xml của Maven.

  • Nó giải quyết các phụ thuộc Maven từ không gian làm việc Eclipse mà không cần cài đặt vào kho lưu trữ Maven cục bộ (yêu cầu dự án phụ thuộc trong cùng một không gian làm việc).

  • Nó tự động tải xuống các nguồn và phụ thuộc cần thiết từ các kho lưu trữ Maven từ xa.

  • Nó cung cấp các trình hướng dẫn để tạo các dự án Maven mới, pom.xml và cho phép hỗ trợ Maven trên các dự án hiện có

  • Nó cung cấp khả năng tìm kiếm nhanh các phụ thuộc trong kho Maven từ xa.

Cài đặt plugin m2eclipse

Sử dụng một trong các liên kết sau để cài đặt m2eclipse -

Nhật thực URL
Eclipse 3.5 (Gallileo)

Cài đặt m2eclipse trong Eclipse 3.5 (Gallileo)

Eclipse 3.6 (Helios)

Cài đặt m2eclipse trong Eclipse 3.6 (Helios)

Ví dụ sau sẽ giúp bạn tận dụng lợi ích của việc tích hợp Eclipse và maven.

Nhập một dự án maven trong Eclipse

  • Mở Eclipse.

  • Lựa chọn File > Import > Lựa chọn.

  • Chọn Tùy chọn Dự án Maven. Nhấp vào nút Tiếp theo.

  • Chọn Vị trí dự án, nơi dự án được tạo bằng Maven. Chúng tôi đã tạo một Ngân hàng tiêu dùng Dự án Java trong các chương trước. Đi tới chương 'Tạo dự án Java' để xem cách tạo dự án bằng Maven.

  • Nhấp vào nút Kết thúc.

Bây giờ, bạn có thể thấy dự án maven trong nhật thực.

Bây giờ, hãy xem consumer Bankingtài sản của dự án. Bạn có thể thấy rằng Eclipse đã thêm các phụ thuộc Maven vào đường dẫn xây dựng java.

Bây giờ, đã đến lúc xây dựng dự án này bằng cách sử dụng khả năng maven của nhật thực.

  • Nhấp chuột phải vào dự án ConsumerBanking để mở menu ngữ cảnh.
  • Chọn tùy chọn Run as.
  • Sau đó, tùy chọn gói maven.

Maven sẽ bắt đầu xây dựng dự án. Bạn có thể xem kết quả đầu ra trong Eclipse Console như sau:

[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO]
[INFO] Id: com.companyname.bank:consumerBanking:jar:1.0-SNAPSHOT
[INFO] task-segment: [package]
[INFO] -------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test]
[INFO] Surefire report directory:
C:\MVN\consumerBanking\target\surefire-reports

-------------------------------------------------------
T E S T S
-------------------------------------------------------

Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar]

[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------

[INFO] Total time: 1 second
[INFO] Finished at: Thu Jul 12 18:18:24 IST 2012
[INFO] Final Memory: 2M/15M
[INFO] -------------------------------------------------------------------

Bây giờ, nhấp chuột phải vào App.java. Lựa chọnRun AsLựa chọn. Sau đó chọnJava Application.

Bạn sẽ thấy kết quả như sau:

Hello World!

NetBeans 6.7 và mới hơn đã hỗ trợ sẵn cho Maven. Trong trường hợp của phiên bản trước, plugin Maven có sẵn trong Trình quản lý plugin. Chúng tôi đang sử dụng NetBeans 6.9 trong ví dụ này.

Một số tính năng của NetBeans được liệt kê dưới đây:

  • Bạn có thể chạy các mục tiêu Maven từ NetBeans.

  • Bạn có thể xem đầu ra của các lệnh Maven bên trong NetBeans bằng bảng điều khiển riêng của nó.

  • Bạn có thể cập nhật các phụ thuộc maven với IDE.

  • Bạn có thể khởi chạy các bản dựng Maven từ bên trong NetBeans.

  • NetBeans thực hiện quản lý phụ thuộc tự động dựa trên pom.xml của Maven.

  • NetBeans giải quyết các phụ thuộc Maven từ không gian làm việc của nó mà không cần cài đặt vào kho lưu trữ Maven cục bộ (yêu cầu dự án phụ thuộc phải trong cùng một không gian làm việc).

  • NetBeans tự động tải xuống các nguồn và phụ thuộc bắt buộc từ các kho lưu trữ Maven từ xa.

  • NetBeans cung cấp các trình hướng dẫn để tạo các dự án Maven mới, pom.xml.

  • NetBeans cung cấp trình duyệt Kho lưu trữ Maven cho phép bạn xem kho lưu trữ cục bộ và các kho lưu trữ Maven bên ngoài đã đăng ký.

Ví dụ sau sẽ giúp bạn tận dụng lợi ích của việc tích hợp NetBeans và Maven.

Mở một dự án maven trong NetBeans

  • Mở NetBeans.

  • Lựa chọn File Menu > Open Project Lựa chọn.

  • Chọn Vị trí dự án, nơi dự án được tạo bằng Maven. Chúng tôi đã tạo một ConsumerBanking của Dự án Java. Đi tới chương 'Tạo dự án Java' để xem cách tạo dự án bằng Maven.

Bây giờ, bạn có thể thấy dự án maven trong NetBeans. Hãy xem các Thư viện và Thư viện Thử nghiệm của dự án ConsumerBanking. Bạn có thể thấy rằng NetBeans đã thêm các phụ thuộc Maven vào đường dẫn xây dựng của nó.

Xây dựng một dự án maven trong NetBeans

Bây giờ, đã đến lúc xây dựng dự án này bằng khả năng maven của NetBeans.

  • Nhấp chuột phải vào dự án ConsumerBanking để mở menu ngữ cảnh.
  • Chọn tùy chọn Clean and Build as.

Maven sẽ bắt đầu xây dựng dự án. Bạn có thể xem kết quả trong NetBeans Console như sau:

NetBeans: Executing 'mvn.bat -Dnetbeans.execution = true clean install'
NetBeans:      JAVA_HOME = C:\Program Files\Java\jdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
   task-segment: [clean, install]
------------------------------------------------------------------------
[clean:clean]
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[compiler:compile]
Compiling 2 source files to C:\MVN\consumerBanking\target\classes
[resources:testResources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\test\resources
[compiler:testCompile]
Compiling 1 source file to C:\MVN\consumerBanking\target\test-classes
[surefire:test]
Surefire report directory: C:\MVN\consumerBanking\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[jar:jar]
Building jar: C:\MVN\consumerBanking\target\consumerBanking-1.0-SNAPSHOT.jar
[install:install]
Installing C:\MVN\consumerBanking\target\consumerBanking-1.0-SNAPSHOT.jar
to C:\Users\GB3824\.m2\repository\com\companyname\bank\consumerBanking\
1.0-SNAPSHOT\consumerBanking-1.0-SNAPSHOT.jar
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 9 seconds
Finished at: Thu Jul 19 12:57:28 IST 2012
Final Memory: 16M/85M
------------------------------------------------------------------------

Chạy ứng dụng trong NetBeans

Bây giờ, nhấp chuột phải vào App.java. Lựa chọnRun Filenhư tùy chọn. Bạn sẽ thấy kết quả trong NetBeans Console.

NetBeans: Executing 'mvn.bat -Dexec.classpathScope = runtime 
-Dexec.args = -classpath %classpath com.companyname.bank.App 
-Dexec.executable = C:\Program Files\Java\jdk1.6.0_21\bin\java.exe 
-Dnetbeans.execution = true process-classes 
org.codehaus.mojo:exec-maven-plugin:1.1.1:exec'
NetBeans:      JAVA_HOME = C:\Program Files\Java\jdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
   task-segment: [process-classes, 
   org.codehaus.mojo:exec-maven-plugin:1.1.1:exec]
------------------------------------------------------------------------
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually) 
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[compiler:compile]
Nothing to compile - all classes are up to date
[exec:exec]
Hello World!
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 1 second
Finished at: Thu Jul 19 14:18:13 IST 2012
Final Memory: 7M/64M
------------------------------------------------------------------------

IntelliJ IDEA có hỗ trợ tích hợp cho Maven. Chúng tôi đang sử dụng IntelliJ IDEA Community Edition 11.1 trong ví dụ này.

Một số tính năng của IntelliJ IDEA được liệt kê dưới đây:

  • Bạn có thể chạy các mục tiêu Maven từ IntelliJ IDEA.

  • Bạn có thể xem kết quả đầu ra của các lệnh Maven bên trong IntelliJ IDEA bằng bảng điều khiển của riêng nó.

  • Bạn có thể cập nhật các phụ thuộc maven trong IDE.

  • Bạn có thể khởi chạy các bản dựng Maven từ bên trong IntelliJ IDEA.

  • IntelliJ IDEA thực hiện quản lý phụ thuộc tự động dựa trên pom.xml của Maven.

  • IntelliJ IDEA giải quyết các phụ thuộc Maven từ không gian làm việc của nó mà không cần cài đặt vào kho lưu trữ Maven cục bộ (yêu cầu dự án phụ thuộc phải ở trong cùng một không gian làm việc).

  • IntelliJ IDEA tự động tải xuống các nguồn và phụ thuộc cần thiết từ kho lưu trữ Maven từ xa.

  • IntelliJ IDEA cung cấp các trình hướng dẫn để tạo các dự án Maven mới, pom.xml.

Ví dụ sau sẽ giúp bạn tận dụng lợi ích của việc tích hợp IntelliJ IDEA và Maven.

Tạo một dự án mới trong IntelliJ IDEA

Chúng tôi sẽ nhập dự án Maven bằng New Project Wizard.

  • Mở IntelliJ IDEA.

  • Lựa chọn File Menu > New Project Lựa chọn.

  • Chọn dự án nhập từ mô hình hiện có.

  • Chọn tùy chọn Maven
  • Chọn Vị trí dự án, nơi dự án được tạo bằng Maven. Chúng tôi đã tạo một ConsumerBanking của Dự án Java. Đi tới chương 'Tạo dự án Java' để xem cách tạo dự án bằng Maven.

  • Chọn dự án Maven để nhập.
  • Nhập tên của dự án và nhấp vào kết thúc.
  • Bây giờ, bạn có thể thấy dự án maven trong IntelliJ IDEA. Hãy xem các thư viện bên ngoài của dự án ConsumerBanking. Bạn có thể thấy rằng IntelliJ IDEA đã thêm các phần phụ thuộc Maven vào đường dẫn xây dựng của nó trong phần Maven.

Xây dựng dự án maven trong IntelliJ IDEA

Bây giờ, đã đến lúc xây dựng dự án này bằng cách sử dụng khả năng của IntelliJ IDEA.

  • Chọn dự án ConsumerBanking.

  • Lựa chọn Buid menu > Rebuild Project Lựa chọn

Bạn có thể thấy đầu ra trong Bảng điều khiển IntelliJ IDEA

4:01:56 PM Compilation completed successfully

Chạy ứng dụng trong IntelliJ IDEA

  • Chọn dự án ConsumerBanking.

  • Nhấp chuột phải vào App.java để mở menu ngữ cảnh.

  • lựa chọn Run App.main()

Bạn sẽ thấy kết quả trong IntelliJ IDEA Console.

"C:\Program Files\Java\jdk1.6.0_21\bin\java"
-Didea.launcher.port=7533 
"-Didea.launcher.bin.path=
C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 11.1.2\bin"
-Dfile.encoding=UTF-8 
-classpath "C:\Program Files\Java\jdk1.6.0_21\jre\lib\charsets.jar;

C:\Program Files\Java\jdk1.6.0_21\jre\lib\deploy.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\javaws.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\jce.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\jsse.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\management-agent.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\plugin.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\resources.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\rt.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\dnsns.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\localedata.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunjce_provider.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunmscapi.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunpkcs11.jar

C:\MVN\consumerBanking\target\classes;
C:\Program Files\JetBrains\
IntelliJ IDEA Community Edition 11.1.2\lib\idea_rt.jar" 
com.intellij.rt.execution.application.AppMain com.companyname.bank.App
Hello World!

Process finished with exit code 0