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,这正是我们所期望的。

你可能感兴趣的:(helloworld)