`

HelloWorld

 
阅读更多
Maven的安装

1.下载Maven然后解压到D:\software。当然别的文件夹也可以
2.设置环境变量
M2_HOME:D:\software\apache-maven-2.0.11
M2:%M2_HOME%\bin
3.在命令行输入mvn -version查看安装结果

HelloWorld程序

1.首先建立一个项目根目录:D:\maven_test\helloworld
2.在根目录下编写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.edu.neu</groupId>   
  <artifactId>helloworld</artifactId>   
  <version>1.0-SNAPSHOT</version>   
  <name>Maven Hello World Project</name>   
</project>  

3.Maven假设项目主代码位于src/main/java目录,所以我们建立相应的目录结构。
4.在src/main/java的目录下建立我们自己项目的包结构:com/edu/neu/helloworld/HelloWorld.java
package com.edu.neu.helloworld.helloworld;
public class HelloWorld   
{   
   public String sayHello()   
   {   
     return "Hello Maven";   
   }   
  
  public static void main(String[] args)   
   {   
     System.out.print( new HelloWorld().sayHello() );   
   }   
}  

5.回到项目的根目录,命令行输入mvn clean compile。这样我们会发现根目录多了一个target包,我们编译后的代码就在这个包的下面。

编写测试代码

1.在pom.xml下添加junit的配置。
<dependencies>   
    <dependency>   
       <groupId>junit</groupId>   
       <artifactId>junit</artifactId>   
       <version>4.7</version>   
       <scope>test</scope>   
    </dependency>   
</dependencies> 

2.测试的文件放在src/test/java下,然后创建相应的包目录结构。
3.java测试代码如下:
package com.edu.neu.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class HelloWorldTest
{
    @Test
    public void testSayHello()
    {
        HelloWorld helloWorld = new HelloWorld();

        String result = helloWorld.sayHello();

        assertEquals( "Hello Maven", result );
    }
} 

4.执行mvn clean test
出现如下错误:
Compilation failure   
D:\code\hello-world\src\test\java\com\juvenxu\mvnbook\helloworld\HelloWorldTest.java:[8,5] -source 1.3 中不支持注释   
(请使用 -source 5 或更高版本以启用注释)   
    @Test  

原因是因为jdk的版本较低,我们需要配置更高的版本。我们在pom.xml中加入如下代码:
<build>   
    <plugins>   
       <plugin>   
         <groupId>org.apache.maven.plugins</groupId>   
         <artifactId>maven-compiler-plugin</artifactId>   
         <configuration>   
           <source>1.5</source>   
           <target>1.5</target>   
         </configuration>   
       </plugin>   
    </plugins>   
  </build>   

这回执行mvn clean test就没有问题了。

打包和运行

1.mvn clean package 进行打包

类似地,Maven会在打包之前执行编译、测试等操作。这里我们看到jar:jar任务负责打包,实际上就是jar插件的jar目标将项目主代码打包成一个名为hello-world-1.0-SNAPSHOT.jar的文件,该文件也位于target/输出目录中,它是根据artifact-version.jar规则进行命名的,如有需要,我们还可以使用finalName来自定义该文件的名称,这里暂且不展开,本书后面会详细解释。

至此,我们得到了项目的输出,如果有需要的话,就可以复制这个jar文件到其他项目的Classpath中从而使用HelloWorld类。但是,如何才能让其他的Maven项目直接引用这个jar呢?我们还需要一个安装的步骤,执行 mvn clean install:

在打包之后,我们又执行了安装任务install:install,从输出我们看到该任务将项目输出的jar安装到了Maven本地仓库中,我们可以打开相应的文件夹看到Hello World项目的pom和jar。之前讲述JUnit的POM及jar的下载的时候,我们说只有构件被下载到本地仓库后,才能由所有Maven项目使用,这里是同样的道理,只有将Hello World的构件安装到本地仓库之后,其他Maven项目才能使用它。

HelloWorld中有一个main方法,如果我们想让它运行怎么办呢?现在META-INF/MANIFEST.MF中还没有关于main方法的配置信息。现在我们在pom.xml添加如下代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>1.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.edu.neu.helloworld.HelloWorld</mainClass>
         </transformer>
       </transformers>
     </configuration>
     </execution>
  </executions>
</plugin>


现在执行 mvn clean install ,待构建完成之后打开target/目录,我们可以看到hello-world-1.0-SNAPSHOT.jar和original-hello-world-1.0-SNAPSHOT.jar,前者是带有Main-Class信息的可运行jar,后者是原始的jar,打开hello-world-1.0-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看到它包含这样一行信息:

Main-Class: com.juvenxu.mvnbook.helloworld.HelloWorld

现在,我们在项目根目录中执行该jar文件:

D: \maven_test\helloworld>java -jar target\hello-world-1.0-SNAPSHOT.jar

Hello Maven

控制台输出为Hello Maven,这正是我们所期望的。

分享到:
评论

相关推荐

    hello world hello world

    hello world

    Helloworld_helloworld_

    输出HELLOWORLD然后输出Helloworld最后的最后的输出Helloworld

    OpenWrt之helloworld程序

    OpenWrt之helloworld程序开发入门,里面包含helloworld和Makefile

    helloworld

    helloworld

    SpringMVC ---- HelloWorld ---- 代码

    SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- Hello...

    Hello World

    // Display the Hello World message. messageLabel.Text = "Hello World"; } private void exitButton_Click(object sender, EventArgs e) { // Exit the project. this.Close(); } private void ...

    第一个Ext 3.2版本的Hello World程序

    4、打开IE在地址栏输入“http://localhost:8088/FirstExt/HelloWorld.html”之后敲回车,如果一切正常,那么你会看到Ext 3.2版本的Hello world程序--它会一秒钟之后变背景色 阅读对象:希望使用新版本的Ext框架开发...

    一个简单的qt版helloworld程序

    一个简单的qt版helloworld程序

    HelloWorld_打印HelloWorld_

    打印HelloWorld ,在Visual Studio的开发环境当中,实现简单的操作。

    Spring4 HelloWorld

    Spring4 HelloWorld初学Spring,java bean通过applicationContext.xml配置SpringIoC容器生成。

    C#入门

    C#第一个程序,helloworld using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace helloworld { class helloworld { [STAThread] static void Main(string[] args)...

    helloworld vbs 脚本

    helloworld vbs 脚本hellohelloworld vbs 脚本world vbs 脚本helloworld vbs 脚本helloworld vbs 脚本helloworld vbs 脚本

    编写 hello world web 程序

    • 在命令行打印 hello world! 字符 //mkdir nodejs-demo //cd nodejs-demo // https://sample.wangding.in/nodejs/tern-project //mv tern-project .tern-project //mkdir 01-introduction //touch 01-hello-world....

    Hello World C源码

    Hello World C源码 Hello World C源码 Hello World C源码 Hello World C源码 Hello World C源码

    MDK5.15版本的HelloWorld

    这是我自己在MDK5.15环境写的一个STM32F103RCT6运行的HelloWorld程序,用的固件库版本是V3.5.0。固件库也包含在里面。使用的串口是USART1。分享给大家,希望可以为大家节省一点开发时间。

    深入浅出hello world

    深入浅出hello world。从一个简单的hello,world程序开始,经过预处理、编译、汇编、链接、加载各个步骤详细介绍程序从编辑到执行的过程。深入的讲解了linux下程序的编译过程,并且讲解了linux kernel系统调用的相关...

    Hello World.rar_c++ hello world_world

    c++编写hello world 简单的c++程序

    Hello World的输入

    HELLO WORLD的输入和C语言的一些简单用法,我们计算出HELLO WORLD的数十种形式,希望喜欢

Global site tag (gtag.js) - Google Analytics