文档章节

maven helloworld

smallniu
 smallniu
发布于 2014/06/06 21:19
字数 1192
阅读 127
收藏 0

一、环境

 ubuntu-14.04-desktop-amd64-64系统

二、hello-world项目编写步骤

首先新建一个hello-world文件夹

$ mkdir hello-world

1.编写pom.xml文件

  在hello-world文件夹中新建并编写pom.xml

 $ vim pom.xml


                               清单1 - pom.xml文件内容

<?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>org.pq.mvn</groupId>
  <artifactId>hello-world</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>maven hello,world</name>
 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
 </dependencies>
</project>


2.编写主代码  

      项目代码分为主代码和测试代码,主代码会被打包到最终的构件中(如:jar),而测试代码只能在运行测试时用到,不会被打包。

      maven约定:主代码目录 src/main/java    测试代码目录src/test/java

首先在hello-world文件夹下创建主代码和测试代码目录

$ mkdir –p src/main/java
$ mkdir –p src/test/java

接下来创建并编写Helloworld.java主代码:

 $ mkdir –p sr/main/java/org/pq/mvn/helloworld
 $ vim src/main/java/org/pq/mvn/helloworld/Helloworld.java
package org.pq.mvn.helloworld;
public class Helloworld {
  public String sayHello(){
   return "hello,pengqiang";
  }
  public static void main(String[] args){
    System.out.print(new Helloworld().sayHello());
  }
}

最后,使用maven编译代码

    在Hello-world文件夹(项目根目录)下,执行mvn clean compile命令

说明:该命令首先执行clean;clean任务,删除根目录下target目录,再执行resources:resources任务,最后

         执行compiler:compile任务,将项目主代码编译至target/classes目录。

注意:配置好自己的settings.xml

        我的配置是 ~/.m2/settings.xml

         其中:<localRepository>/app/repository</localRepository>

3.编写测试代码

      maven中测试要引入JUnit,之前在pom.xml中已经加入了Junit依赖,并且测试代码目录建立了,现在直接编写HelloworldTest.java测试代码吧。

$ mkdir src/test/java/org/pq/mvn/helloworld

$ vim src/test/java/org/pq/mvn/helloworld/HelloworldTest.java
package org.pq.mvn.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloworldTest {
  @Test
  public void testSayHello(){
     Helloworld hello = new Helloworld();
     String result = hello.sayHello();
     assertEquals("hello,pengqiang",result);
  }
}

 接下来,编译测试代码:mvn clean test

  执行成功后目录下会多出target/test-class文件夹。

 注意:  有的比较低的版本在执行该命令时会报错:

           -source1.3中不支持注释,请使用-source5或更高版本以启用注释。@Test…

 原因是:测试代码中用到了@Test注解的方式,这需要java5或以上的版本。而maven的核心插件:compile插件默认支持java3,

因此需要配置maven-compiler-plugin插件使其支持java 5或更高的版本.

                                             清单2 maven-compiler-plugin配置(插入到pom.xml中)

<plugin>               

     <groupId>org.apache.maven.plugins</groupId>

     <artifactId>maven-compiler-plugin</artifactId>

     <version>2.3.2</version>

          <configuration>

               <source>1.6</source>

               <target>1.6</target>

               <encoding>UTF-8</encoding>

     </configuration>

</plugin>



4.打包和安装  

 pom.xml可以指定打包的类型,如果没有指定,默认打包类型是jar。

  执行命令:mvn clean package

  执行成功后目录下会多出一个target/hello-world-1.0-SNAPSHOT.jar文件

那如何才能让其他项目来引用这个jar包呢?

 可以执行命令: mvn clean install

执行成功后,你可以在你的本地的maven仓库看到hello-world-1.0-SNAPSHOT.jar

其他项目想用,直接pom.xml依赖就ok。

说明:我本地的maven仓库地址:/app/repository

该jar包地址就会是:

/app/repository/org/pq/mvn/hello-world/1.0-SNAPSHOT/hello-world-1.0-SNAPSHOT.jar

5.运行Helloworld  

 如何运行我们刚才建立的Hello-world项目呢?

$ java -jar hello-world-1.0-SNAPSHOT.jar

运行后结果报错:

no main manifest attribute, in hello-world-1.0-SNAPSHOT.jar

分析:Helloworld.java中有个main方法,但默认打包生产的jar是不能够直接运行的,因为带有main方法的类信息不会添加到manifest中(META-INF/MANIFEST.MF文件)。

为了生产可执行的jar文件,需要借助maven-shade-plugin插件,把下面代码加入pom.xml中。   

                                    清单3  插件maven-shade-plugin配置

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestlResourceTransformer">    
                    <mainClass>org.pq.mvn.helloworld.Helloworld</mainClass>
               </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

再次执行一遍 mvn clean package.

 目录下会有hello-world-1.0-SNAPSHOT.jar  original-hello-world-1.0-SNAPSHOT.jar两个jar包。

  前者是带有Main-Class信息的可运行jar,后者是原始的jar。

$ java –jar hello-world-1.0-SNAPSHOT.jar

 打印出:hello,pengqiang

三、快速创建一个maven项目骨架

看到上面的建立一个maven项目的步骤,很繁琐,幸好,maven提供了Archetype,可以帮助我们快速勾勒出项目骨架。

在任意目录下

$ mvn archetype:generate

该命令执行后,会打印很多的Archetype供选择,直接回车的话,会选择默认的ArcheType插件maven-archetype-quickstart。接下来会提示选择maven-archetype-quickstart版本。一切ok后会提示填写要构建项目的groupId等。

Define value for property 'groupId': : org.pq.mvn           

Define value for property 'artifactId': : hello-archetype                     

[INFO] Using property: version = 1.0-SNAPSHOT

Define value for property 'package':  org.pq.mvn: : org.pq.mvn.helloworld

Confirm properties configuration:

groupId: org.pq.mvn

artifactId: hello-archetype

version: 1.0-SNAPSHOT

package: org.pq.mvn.helloworld

 Y: : Y

执行成功后,目录下会有个maven项目:hello-archetype



参考书籍:maven实战


© 著作权归作者所有

共有 人打赏支持
smallniu
粉丝 5
博文 28
码字总数 28843
作品 0
西城
程序员
maven生成可执行jar

元素名称 简 介 <project> POM的xml根元素 <parent> 声明继承 <modules> 声明聚合 <groupId> 坐标元素之一 project -root element of pom.xml files. modelVersion -设置POM version, 类似于......

泡海椒
2016/02/28
60
0
maven(二)HelloWorld

一.maven 文件大致解释 bin目录:包含maven的运行脚本 boot目录:类加载器的框架,maven用此加载自己需要的类库 conf目录:配置文件目录,里面有以后经常用到的settings.xml配置文件 lib目录:包...

路人丁语
2016/03/14
27
0
【maven3学习之四】helloworld几点需要注意的地方

在上一篇说到了如何通过achetype的命令建立一个简单的helloworld,这里将对其重要的部分进行一些讲解。 pom.xml文件 POM的全称是 project object model,项目对象模型。它的作用是描述项目信...

MyHeaven
2013/01/01
0
0
maven(五)的几个常用命令

mvn -v:查看maven版本 mvn compile:编译项目 mvn test:执行测试项目 mvn package:打包项目 上面几个在maven(二)中有演示 mvn clean:删除target 从黄色的信息中可以看到删除target成功 可...

路人丁语
2016/03/17
54
0
[Maven-不忘初心,方得始终] Maven Project初识

Maven项目目录结构: src -main -java -package(包名) -test -java -package(包名) resources-存放资源文件 以"Maven项目之HelloWorld"来说明如何纯手工构建一个Maven项目. 按照上面给出的目录...

LSantorini
2016/02/15
126
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周日乱弹 —— 种族不同,禁止交往

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《苏菲小姐》- 鱼果 《苏菲小姐》- 鱼果 手机党少年们想听歌,请使劲儿戳(这里) @貓夏:下大雨 正是睡觉的好时候 临睡前...

小小编辑
今天
199
6
Python 搭建简单服务器

Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下: 1.等待客户端的链接,服务器会收到一个http协议的请求数据报 2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文...

代码打碟手
今天
1
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
今天
0
0
qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部