maven helloworld
博客专区 > smallniu 的博客 > 博客详情
maven helloworld
smallniu 发表于4年前
maven helloworld
  • 发表于 4年前
  • 阅读 113
  • 收藏 0
  • 点赞 1
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: maven helloworld学习

一、环境

 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实战


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 5
博文 16
码字总数 28843
×
smallniu
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: