90分钟

Maven 应用实战

Maven 应用实战

实验预计耗时:90分钟

1. 课程背景

1.1 课程目的

Maven 是一个项目管理工具,我们通过创建 Maven 工程快速获取项目所需要的 jar 包,并保存在本地仓库,也可以帮助我们对自己的项目进行生成jar包等项目管理操作。通过 Maven 实战练习实验教程,学员将体验 Maven 项目从开发到云上部署的全部流程。通过本次实验课程,您可以掌握:

  1. Java 和 Maven 开发环境的安装与配置;
  2. 了解 Maven 工程的开发流程;
  3. 掌握 Maven 的基本功能;
  4. 掌握腾讯 Kona 的安装与配置;

1.2 课前知识准备

学习本课程前,学员需要掌握以下前置知识:

1、能力基础

  • Linux 运维基础:掌握 Linux 远程登录、文件与目录管理等。
  • Java 开发基础:掌握 Java 基础语法,了解面向对象开发等。

2、相关概念

  • Java:Java 是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java可运行于多个平台,如Windows, Mac OS,及其他多种UNIX版本的系统。
  • JDK:JDK(Java Development Kit)称为 Java 开发包或 Java 开发工具,是一个编写 Java 小程序和应用程序的程序开发环境。JDK 是整个 Java 的核心,包括了 Java 运行环境(Java Runtime Envirnment),一些 Java 工具和 Java 的核心类库(Java API)。
  • 腾讯 Kona(Tencent Kona):基于 OpenJDK8,由腾讯专业技术团队提供技术维护、优化及安全保障。腾讯云团队针对腾讯 Kona 在云场景的支撑及特性进行了开发及优化,使其更加适合云场景下的 Java 业务,为您提供最优的 Java 云生产环境及解决方案。
  • Maven:Maven 是一个项目管理工具,基于项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建,报告和文档。
  • Maven构建生命周期:Maven 构建生命周期定义了一个项目构建跟发布的过程,一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的:

阶段

处理

描述

验证 validate

验证项目

验证项目是否正确且所有必须信息是可用的

编译 compile

执行编译

源代码编译在此阶段完成

测试 test

测试

使用适当的单元测试框架(例如 JUnit)运行测试。

包装 package

打包

创建 JAR/WAR 包如在 pom.xml 中定义提及的包

检查 verify

检查

对集成测试的结果进行检查,以保证质量达标

安装 install

安装

安装打包的项目到本地仓库,以供其他项目使用

部署 deploy

部署

拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

2.实验环境

2.1 实验操作环境

本课程需要以下实验操作环境:

  1. 可以接入互联网的笔记本电脑或者台式机(本实验使用 Windows 系统)
  2. 腾讯云 CVM(CentOS 7.6 64位)
  3. 本地Java开发环境(JDK 版本1.8,Maven 版本3.5及以上)
  4. 集成开发环境:Eclipse 或 IntelliJ IDEA

2.2 实验架构图

本实验在本地部署 Java 开发环境,需安装 JDK,Maven,开发工具演示分别使用 Eclipse 和 IntelliJ IDEA,SSH 工具使用 PuTTY。在本地完成 Maven 项目开发与打包后,将 jar 文件上传至云服务器运行。实验架构图如下:

2.3 实验的数据规划表

资源名称

数据

说明

腾讯云账号

账号:XXXXXXXX、密码:XXXXXXXX

涉及产品如下:VPC、CVM

JDK

版本:1.8

腾讯 Kona

版本:8.0

Maven

版本:3.6.3

IntelliJ IDEA

版本:最新版即可

Eclipse

版本:最新版即可

PuTTY

版本:0.73

SSH工具,请学员自行安装

下载JDK

腾讯 Kona安装介绍

下载Maven

下载IntelliJ IDEA

下载Eclipse

下载PuTTY

3. 实验流程

实验共分为四个步骤,首先任务1带领学员在本地部署 Java 开发环境,内容包括 Java、Maven、IntelliJ IDEA 以及 Eclipse的安装与配置。

接着我们开始开发 Maven 程序,程序共包含两个 Maven工程:hello-api 和 hello-project。hello-project为程序的执行工程,hello-api 作为 hello-poject 的依赖工程。任务2与任务3将分别使用 IntelliJ IDEA 和 Eclipse 完成 hello-api 和 hello-project 的开发与部署。

最后我们购买一个 CVM 实例,快速实现项目的云上部署。任务4会涉及到云服务器 CVM 的购买,腾讯 Kona 的安装配置,以及项目上传到 CVM 并运行。

4. 实验步骤

任务1 本地Java开发环境准备

【任务目标】

在计算机上安装 Java 的开发环境,包括 Java 和 Maven 的安装与配置,以及 IntelliJ IDEA 与 Eclipse 两款 IDE(集成开发环境)的安装与配置。

【任务步骤】

1、Java安装

如果没有安装 Java,请下载安装 Java 软件开发套件(JDK)。官方下载连接:https://www.oracle.com/technetwork/java/javase/downloads/index.html

1.在网页中找到 Java SE 8 点击【DOWNLOAD】。

2.在Java SE Development Kit这一栏,首先选择Accept License Agreement ,再选择下载与您电脑系统匹配的下载连接。

注意:下载需要注册Oracle账号,请自行注册。

3.启动 JDK 安装包,点击更改修改安装目录,点击下一步。并根据提示安装好 JDK 和 JRE。

4.安装成功后,设置 Java 环境(本实验使用的是Java 1.8.0_144版本,学员只要使用 jdk1.8 均不受影响)。

打开系统>高级系统设置>环境变量

设置 JAVA_HOME 环境变量,并指向您机器上的 Java 安装目录,本实验安装位置 D:\develop\Java\jdk1.8.0_144。

以 Java 1.8.0_144 版本为例,Windows 操作系统的输出如下:

变量

JAVA_HOME

D:\develop\Java\jdk1.8.0_144

Path添加变量值

;% JAVA _HOME%\bin

5.检查 Java 安装

打开终端,执行如下命令:

java -version

如果输出 Java 版本号,说明 Java 安装成功。

2、安装Maven

1.下载安装 Maven

官方下载连接:https://maven.apache.org/download.cgi

以Windows系统,3.6.3版本为例,点击 apache-maven-3.6.3-bin.zip 即可下载压缩包。

下载后可以解压至指定文件夹下,本实验使用 maven3.6.1 版本,Maven 的位置为 D:\develop\maven。

2.设置 MAVEN_HOME 和 PATH 环境变量

变量

MAVEN_HOME

D:\develop\maven

Path添加变量值

;%MAVEN_HOME%\bin

3.验证 Maven 配置

当 Maven 配置完成后, 通过执行如下命令验证 Maven 是否配置成功。

mvn --version

4.Maven 配置私服地址

找到 Maven 所使用的配置文件 MAVEN_HOME/conf/settings.xml,在 settings.xml 中加入配置(若无法保存或编辑,先拷贝到非系统盘,编辑后替换原文件):

注:其中 localRepository 标签用于指定本地仓库位置,用于存放后续步骤中下载的依赖。本实验定义仓库位置为 D:\develop\maven\repository,参考如下:

   <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
       <div id="saka-gui-root"/>
       <!-- 自定义的本地仓库路径 -->
       <localRepository>D:\develop\maven\repository</localRepository>
       <pluginGroups/>
       <proxies/>
       <servers/>
       <mirrors/>
       <profiles>
           <profile>  
			<id>jdk-1.8</id>  
			<activation>  
				<activeByDefault>true</activeByDefault>  
				<jdk>1.8</jdk>  
			</activation>  
			<properties>  
				<maven.compiler.source>1.8</maven.compiler.source>  
				<maven.compiler.target>1.8</maven.compiler.target>  
				<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>  
			</properties>  
			</profile>
           <profile>
               <id>nexus</id>
               <repositories>
                   <repository>
                       <id>central</id>
                       <url>http://repo1.maven.org/maven2</url>
                       <releases>
                           <enabled>true</enabled>
                       </releases>
                       <snapshots>
                           <enabled>true</enabled>
                       </snapshots>
                   </repository>
               </repositories>
               <pluginRepositories>
                   <pluginRepository>
                       <id>central</id>
                       <url>http://repo1.maven.org/maven2</url>
                       <releases>
                           <enabled>true</enabled>
                       </releases>
                       <snapshots>
                           <enabled>true</enabled>
                       </snapshots>
                   </pluginRepository>
               </pluginRepositories>
           </profile>
           <profile>
               <id>qcloud-repo</id>
               <repositories>
                   <repository>
                       <id>qcloud-central</id>
                       <name>qcloud mirror central</name>
                       <url>
   http://mirrors.cloud.tencent.com/nexus/repository/maven-public/
                       </url>
                       <snapshots>
                           <enabled>true</enabled>
                       </snapshots>
                       <releases>
                           <enabled>true</enabled>
                       </releases>
                   </repository>
               </repositories>
               <pluginRepositories>
                   <pluginRepository>
                       <id>qcloud-plugin-central</id>
                       <url>
   http://mirrors.cloud.tencent.com/nexus/repository/maven-public/
                       </url>
                       <snapshots>
                           <enabled>true</enabled>
                       </snapshots>
                       <releases>
                           <enabled>true</enabled>
                       </releases>
                   </pluginRepository>
               </pluginRepositories>
           </profile>
       </profiles>
       <activeProfiles>
           <activeProfile>nexus</activeProfile>
           <activeProfile>qcloud-repo</activeProfile>
       </activeProfiles>
   </settings>

5.验证配置是否成功

配置完 settings 后,可以在 CMD 命令行窗口执行如下命令。

mvn help:effective-settings

运行命令后,当我们看到 BUILD SUCCESS 时,表明 settings.xml 格式正确。

3、IntelliJ IDEA 安装与配置

1.下载 IntelliJ IDEA 安装包并安装,下载地址:

https://www.jetbrains.com/idea/download/#section=windows

选择社区版本即可。

IntelliJ IDEA 安装比较简单,安装按照默认安装配置即可。

2.首先配置 SDK(如 IDEA 版本改变导致此处无法配置,可新建项目后,在开发代码前进行设置)

在 Configure 选项栏下,点击 Project Defaults 下的 Project Structure

选择 JDK 1.8,点击【OK】。

3.配置 Maven(如 IDEA 版本改变导致此处无法配置,可新建项目后,在开发代码前进行设置)

Configure 选项栏下,点击 Settings

在搜索栏搜索 maven,将 Maven 的信息进行配置。配置的内容包括:

  • Maven home directory:Maven 安装路径
  • User settings file:settings.xml 文件位置
  • Local repository:本地仓库位置,用来存储下载的依赖(主要为 Jar 包的形式)

4、Eclipse 安装与配置

1.下载 Eclipse 安装包并安装,下载地址:

https://www.eclipse.org/downloads/packages/

点击适合自己版本的下载链接,并点击。

2.下载 Eclipse安装后,启动安装,点击【Eclipse IDE for Java Developers】:

3.自定义安装位置后,点击【INSTALL】:

4.安装成功后,初次启动 Eclipse 需要指定项目空间,用于存放开发的项目,点击【Launch】。

5.点击菜单栏内 Window 下的 Preferences。

6.在 Preferences 列表中找到 Maven > User Settings,确认 Maven 的配置信息。

任务2 API 项目开发与本地仓库安装

【任务目标】

通过练习 hello-api 项目的编写,让学员掌握如何在 IntelliJ IDEA 中创建一个 Maven 项目,并了解 Maven install 功能的基本使用。

【任务步骤】

1、IntelliJ IDEA 中创建项目

1.启动 IntelliJ IDEA 后,点击 Create New Project

2.选择项目类型为 Maven,点击【Next】:

3.GroupId为:com.test;ArtifactId为:hello-api,点击【Next】(窗口可能因 IDEA 版本不同而改变);

4.Project name 为:hello-api,点击【Finish】;

项目创建成功后配置 Maven 的 pom.xml,添加 lombok 依赖;

<?xml version="1.0" encoding="UTF-8"?>
<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.test</groupId>
    <artifactId>hello-api</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
    </dependencies>
</project>

点击导入或自动导入,点击 Import Changes(手动导入更改) 或 Enable Auto-Import(启动自动导入),开始下载依赖并导入项目。(此处建议每次更改 POM 文件后手动点击 Import Changes)

2、开发Student类

1.创建 package com.test.hello,需要在 src-main-java 右键,选择【new】-【package】创建。并在 package 内创建 Student 类。

2.创建一个简单的Student类并设计三个私有属性:name、gender 和 age。使用 lombok 注解,给 Student 类快速增加构造函数,Getter/Setter 方法以及 ToString 方法。Student 类代码编写如下:

package com.test.hello;


import lombok.*;

@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
@ToString
public class Student {

    private String name;

    private String gender;

    private int age;
}

3、项目安装到本地仓库

1.点击 IDEA 右侧 Maven 栏,点击项目 hello-api 中的 Lifecycle,双击 install 开始执行Maven生命周期的安装。

2.当控制台运行并提示 BUILD SUCCESS时,表示安装成功。

3.在 Maven 本地仓库 /com/test/hello-api 目录下,可以查看到项目已经含有 jar 包,说明项目安装成功。

任务3 执行程序开发与打包

【任务目标】

通过练习hello-project项目的开发与打包,让学员掌握如何在Eclipse中编写及打包Maven工程。

【任务步骤】

1、Eclipse中创建项目

1.启动Eclipse,选择一个Workspace后点击【Launch】;

2.点击菜单栏 File->New ->Maven Project,创建一个 Maven 项目;

勾选 Create a simple project,确认好 Location 后,点击【Next】;

2.项目信息填写如下,点击【Finish】。

项目信息

填写内容

Group Id

com.test

Artifact Id

hello-project

Name

hello-project

2、编写程序

1.编辑 pom.xml,将上一步任务安装的 hello-api 以 dependency(依赖)的形式进行导入,并添加 Maven 插件 maven-shade-plugin,这个插件可以帮助我们打包一个包含项目依赖的jar包。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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
  <artifactId>hello-project</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>hello-project</name>
  
	<dependencies>
	     <dependency>
	         <groupId>com.test</groupId>
	         <artifactId>hello-api</artifactId>
	         <version>1.0-SNAPSHOT</version>
	     </dependency>
	</dependencies>
	<build>
	    <plugins>
	      <plugin>
	        <groupId>org.apache.maven.plugins</groupId>
	        <artifactId>maven-shade-plugin</artifactId>
	        <version>3.2.1</version>
            <executions>
	          <execution>
	            <phase>package</phase>
	            <goals>
	              <goal>shade</goal>
	            </goals>
                <!-- 指定主类 -->
	            <configuration>  
                    <transformers>  
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">  
                            <mainClass>com.test.hello.HelloDemo</mainClass>  
                        </transformer>  
                    </transformers>  
                 </configuration>  
			  </execution>
			</executions>
	      </plugin>
     	</plugins>
     </build>
</project>

2.右键点击src/main/java 选择 New > Package,创建一个包 com.test.hello。

3.右键点击包名,New > Class,创建一个 HelloDemo 类。创建完成后目录显示如下:

4.编写 HelloDemo,代码如下:

package com.test.hello;

public class HelloDemo {
	  public static void main(String[] args) {
	        Student student = new Student();
	        student.setName(args[0]);
	        student.setGender(args[1]);
	        student.setAge(Integer.parseInt(args[2]));
	        System.out.println(student);
	    }
}

代码说明:代码使用 hello-api 内的 Student 类创建一个 student 对象,并将 main 函数接收的参数,依次作为 student 的属性。最后将 student 对象的信息进行打印。

3、项目打包

1.代码编写确认后,我们使用 Maven 对程序生成jar包。

右键点击 hello-project 项目,点击Run As-> Maven install

打包(安装声明周期包含打包)运行结果大致如下,其中我们看到 BUILD SUCCESS 时,表示构建成功:

2.打包成功后,我们可以在该模块目录的 target 文件夹下,查看到已有 jar 包。将 jar 包 hello-project-0.0.1-SNAPSHOT.jar 移至 D 盘等待上传云服务器。

任务4 程序云上部署

【任务目标】

通过实现云上部署运行 hello-project-0.0.1-SNAPSHOT.jar 程序,掌握云服务器的基本使用,以及腾讯 Kona 的基本安装与配置。

【任务步骤】

1、购买腾讯云服务器

1.在腾讯云官网找到云服务器CVM页面,点击【立即选购】。

2.首先在选择机型页面,机型配置如下。

配置项

内容

计费模式

按量计费或竞价实例

地域

广州

可用区

广州四区

网络

新建或使用已有VPC

实例

标准型S5.SMALL2 1核2GB

镜像

公共镜像 CentOS 7.6 64位

系统盘

高性能云硬盘 50GB

公网带宽

免费分配独立公网IP,按使用流量

确认无误后,点击【下一步:设置主机】。

3.设置主机页面,配置如下:

配置项

内容

安全组

使用默认安全组或新建安全组并开通22端口

实例名称

cvm-test

登陆方式

设置密码(学员可根据自己习惯选择)

确认无误后,点击【下一步:确认配置信息】。

服务器信息如下图所示:

4.点击【开通】,会按配置创建 CVM,页面自动跳转到实例页。

5.复制集群页的公网 IP,打开 PuTTY 创建连接,将复制的公网IP粘贴至 Host Name,端口(Port)默认22,如图:

6.点击【Open】,第一次连接会弹出安全警告,点击【是(Y)】。

7.接下在 login as:后填写用户名为 root,密码为购买 CVM 的时候设置的密码:

备注:这里只能使用 root 用户进行连接。

2、安装腾讯 Kona

1.切换目录至 /opt;

cd /opt

下载腾讯 Kona (如版本更改参考链接:https://cloud.tencent.com/document/product/1149/38537):

wget https://konajdk-1257356411.cos.ap-guangzhou.myqcloud.com/RELEASE/KonaJDK-8.0.0-232.x86_64.tar.gz

2.解压压缩包

tar zxf KonaJDK-8.0.0-232.x86_64.tar.gz

3.设置 JAVA_HOME

编辑/etc/profile:

vim /etc/profile

在下方添加内容:

export JAVA_HOME=/opt/KonaJDK-8.0.0-232
export PATH=${JAVA_HOME}/bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/lib

确认无误后保存并退出:

4.使用 source 命令,对环境变量的设置生效;

source /etc/profile

验证,返回可执行文件 java 的位置;

which java

3、运行jar包

1.使用 mkdir 命令创建一个 /test 目录。

创建文件夹test;

mkdir /test

切换到 test 路径下;

cd /test

2.找到 PuTTY 的安装目录,在上方地址栏输入 cmd 并执行,打开 CMD 黑窗口。

3.在弹出的黑窗口中首先输入 psftp,点击回车键打开 psftp 传输工具,使用命令进行文件传输:

psftp

接下来连接服务器,回车后需要输入用户名和密码;

open xxx.xxx.xxx.xxx 

用于切换远程Linux 服务器上的目录;

cd /test/

lcd命令用于切换本地的路径;

lcd D:\

上传文件;

put hello-project-0.0.1-SNAPSHOT.jar 

命令使用可以参考下图:

上传成功后在 Master 节点的/test目录查看到上传的 jar 包。

4.在 jar 包上传成功过后,我们使用命令对程序启动运行。命令如下:我们传入三个参数:”xiaoming“,”male“,19。

java -jar hello-project-0.0.1-SNAPSHOT.jar xiaoming male 19

运行结果如下,可见程序运行成功,程序可以使用hello-api内的Student类创建一个学生对象,并接收到参数,并最终将对象的信息打印到控制台。

至此,您已完成了实验的全部任务。相信您对 Maven 项目的开发与云上部署已经有了基本掌握。

5. 注意事项

如实验资源无需保留,请在实验结束后及时销毁,以免产生额外费用。

6. Q&A

【问题1】在 IDEA 中右键 src-main-java 无法创建 package。

【解决】需要将 src-main-java 设置为 source root 后,才会出现【new】-【package】,否则不会出现。设置 source root 方法如下:

【问题2】项目打包操作过程中,出现 Build Failed。

【解决】在 IDEA 或 eclipse 打包操作过程中,若出现 Build Failed,或报错“不再支持源选项x,请使用xx或更高版本”,请参考:https://cloud.tencent.com/developer/article/1587537