编写POM(Project Object Model)

Maven项目的核心是pom.xml,它定义了项目的基本信息,用于描述项目如何构建,声明项目依赖

  1. 创建文件夹,名称为hello-world
  2. 创建pom.xml文件,位于根目录下
  3. 编辑pom.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    5. http://maven.apache.org/maven-v4_0_0.xsd">
    6. <modelVersion>4.0.0</modelVersion>
    7. <groupId>com.xikunqu.firstmvn</groupId>
    8. <artifactId>helloworld</artifactId>
    9. <version>1.0-SNAPSHOT</version>
    10. <name>Maven Hello World Project</name>
    11. </project>

    解析:

    • <??>中制定了xml文档的版本和编码方式
    • 是文档的根元素,还声明了一些POM相关的命名空间以及xsd元素,使用这些属性可以让第三方工具帮助我们快速编辑POM
    • groupId,artifactId和version定义了一个项目的基本坐标,在Maven中,任何jar,pom,war都是局域这些基本 坐标进行区分的
    • grouId定义了项目属于哪个组,若googlecode上建立了一个myapp项目,groupld就应该是com.googlecode.myapp
    • artifactId定义了当前Maven项目在组中唯一的ID
    • version 制定了hello-world项目当前的版本
    • name生命了一个对于用户更为友好的名称,不是必须的

编写主代码

项目主代码会被导播到最终的构建中,默认情况下,Maven假设项目主代码位于src/main/java目录下

  1. 创建src/main/java目录
  2. 在建好的目录下创建文件com/xikunqu/firstmvn/helloworld/HelloWorld.java

    1. package.com.xikunqu.firstmvn.helloworld;
    2. public class HelloWorld
    3. {
    4. public String sayHello(){
    5. return "Hello World";
    6. }
    7. public stacic void main(String[] args){
    8. System.out.print( new HelloWorld().sayHello());
    9. }
    10. }
  3. 执行编译:mvn clean compile
    运行结果如下:

编写测试代码

  1. 建立目录,src/test/java
  2. 由于要使用JUnit,所以先为项目添加一个JUnit依赖,修改pom.xml,添加如下代码
    1. <dependencies>
    2. <dependency>
    3. <groupId>junit</groupId>
    4. <artifactId>junit</artifactId>
    5. <version>4.7</version>
    6. <scope>test</scope>
    7. </dependency>
    8. </dependencies>

    解析:

    • dependencies元素下可以包含多个dependency元素以声明项目的依赖
    • 这段声明可以使Maven 自动下载junit-4.7.jar
    • scope为依赖范围,表明该依赖值对测试有效
  3. 编写测试类,测试sayHello()方法,检查其返回值,在src/test/java下创建文件HelloWorldTest.java
    1. package com.xikunqu.firstmvn.helloworld;
    2. import static org.junit.Assert.assertEquals;
    3. import org.junit.Test;
    4. public class HelloWorldTest
    5. {
    6. @Test
    7. public void testSayHello(){
    8. HelloWorld helloworld=new HelloWorld();
    9. String result=helloworld.sayHello();
    10. assertEquals("Hello World",result);
    11. }
    12. }
  4. 执行编译:mvn clean test
    运行结果部分截图如下:

打包和运行

在项目进行编译,测试之后,下一重要步骤就是打包

  1. 执行命令:mvn clean package
    运行结果部分截图如下:

    可以看到项目主代码被打包为一个名为helloworld-1.0-SNAPSHOT.jar的文件,位于target目录下。
  2. 目前为止,我们都没有运行HelloWorld项目,默认打包生成的jar是不能后直接运行的,因为带有main方法的类不会被添加到manifest中,为了生成可执行的jar文件,需要借助maven-shade-plugin,在pom.xml添加如下代码:

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.maven.plugins</groupId>
    5. <artifactId>maven-shade-plugin</artifactId>
    6. <version>1.2.1</version>
    7. <executions>
    8. <execution>
    9. <phase>package</phase>
    10. <goals>
    11. <goal>shade</goal>
    12. </goals>
    13. <configuration>
    14. <transformers>
    15. <transformer implementation="org.apache.maven.plugins.shade.resource.
    16. ManifestResourceTransformer">
    17. <mainClass>com.xikunqu.firstmvn.helloworld.HelloWorld</mainClass>
    18. </transformer>
    19. </transformers>
    20. </configuration>
    21. </execution>
    22. </executions>
    23. </plugin>
    24. </plugins>
    25. </build>
  3. 再次执行mvn clean package,构建成功后,可以看见target目录下存在两个jar包,如下图所示:

  4. 执行jar文件,如下图所示:

Maven1-HelloWorld简单入门的更多相关文章

  1. Web Service简单入门示例

    Web Service简单入门示例     我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...

  2. 一篇文章带你了解服务器操作系统——Linux简单入门

    一篇文章带你了解服务器操作系统--Linux简单入门 Linux作为服务器的常用操作系统,身为工作人员自然是要有所了解的 在本篇中我们会简单介绍Linux的特点,安装,相关指令使用以及内部程序的安装等 ...

  3. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

  4. [原创]MYSQL的简单入门

    MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...

  5. Okio 1.9简单入门

    Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...

  6. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

  7. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  8. Docker 简单入门

    Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737

  9. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  10. git简单入门

    git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...

随机推荐

  1. Spark算子篇 --Spark算子之combineByKey详解

    一.概念 rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s@%s" %(a,b), lambda a,b:& ...

  2. 浅谈JavaScript的面向对象程序设计(四)

    本文继续讲解JavaScript的面向对象程序设计.继承是面向对象语言中的一个基本概念,面向对象语言支持两种继承实现方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.但是在 ...

  3. 使用FormatMessage函数编写一个内核错误码查看器

    在编写驱动程序的时候,常用的一个结构是NTSTATUS,它来表示操作是否成功,但是对于失败的情况它的返回码过多,不可能记住所有的情况,应用层有一个GetLastError函数,根据这个函数的返回值可以 ...

  4. CSS选择器:伪类(图文详解)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 伪类(伪类选择器) 伪类:同一个标签,根据其不同的种状态,有不同的样式. ...

  5. Redis 部署主从哨兵 C#使用,实现自动获取redis缓存 实例1

    源码示例下载链接: https://pan.baidu.com/s/1eTA63T4 密码: un96 实现目标:windows 下安装 一台master服务 一台salve redis服务器 并且哨 ...

  6. 为什么用CDN给你网站加速?

    大多数人都知道,一个用户在打开一个新网站的时候,如果网站打开的速度过慢,用户是很难继续浏览的.因而很多网站的运营人员想方设法的提高网站的加载速度.我们也相信速度是一个成功网站的必备要素之一,速度不够快 ...

  7. mongodb 聚合查询

    操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip:忽略结果的数量 $sort:按照给定的字段排序结 ...

  8. Redis 数据结构与内存管理策略(上)

    Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...

  9. HTML/CSS/JavaScript学习笔记【持续更新】

    HTML <font> 标签 定义和用法 <font> 规定文本的字体.字体尺寸.字体颜色. 实例 规定文本字体.大小和颜色: <font size="3&qu ...

  10. use ambiguous的错误——编译错误

    出现这样的问题是因为namespace std里面已经有一个count了,而 using namespace std;语句把该namespace 打开了,这导致了后面的引用不明确: 不过这里也可以把u ...