Maven笔记(三):第一个Maven项目。

    Maven项目的核心是pom.xml。(Project Object Model,项目对象模型)定义了项目的基本信息,用户描述项目如何构建,声明以及依赖等等。现在编写一个HelloWorld的pom.xml。

    首先创建一个名为helloworld的文件夹,输入内容:

<?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>com.lmy</groupId>

    <artifactId>helloworld</artifactId>

    <version>1.0-SNAPSHOT</version>

    <name>Maven Hello World Project</name>

</project>

    modelVersion元素指定了当前POM模型的版本。

    groupId定义了项目属于哪个组,这个组一般和项目所在的组织或者公司的名字存在关联,比如在googlecode上建立一个名为myapp的项目,那么groupId就应该是com.goolecode.myapp。

    artifactId定义了当前Maven项目在组中唯一的ID。

    version则是指定当前的版本---1.0.SNAPSHOT。SNAPSHOT意思为快照,说明该项目还在研发中,是不稳定的版本。

    最后一个name是对用户提供一个友好的项目名称,虽然不是必须的,但是推荐为每个pom.xml添加name。

  主代码:

    Maven假设项目主代码位于src/main/java目录,我们遵循这个约定,创建该目录,在该目录下创建com/lmy/helloworld/HelloWorld.java,内容如下:

package com.lmy.helloworld;

public class HelloWorld{

    public String sayHello(){

        return "Hello World";

    }

    

    public static void main(String[] args){

        System.out.println(new HelloWorld().sayHello());

    }

}

这段java代码需要注意两个地方,首先,大多数情况下,应该把项目的主代码放在src/main/java目录下(Maven的约定),无需额外的配置,Maven会自动搜索该目录找到项目主代码,其次java类的包名应该是com.lmy.helloworld,和之前在pom.xml中定义的groupId和artifactId相吻合。

然后在项目根目录下(pom.xml和src所在目录)运行命令mvn clean compile,输出如下结果

Maven笔记(三):第一个Maven项目。

clean会告诉maven清理输出目录target,compile会告诉maven编译项目主代码,从输出中可以看到先执行了clean,删除target目录。默认情况下,maven构建的所有输出都在target/,接着resources:resources,最后执行compile:compile任务,将项目主代码编译到target/classes目录下。

  测试代码:

     maven项目中测试代码的默认目录是src/test/java。创建该目录。

    使用junit进行测试,首先需要为项目添加junit的依赖包。修改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>com.lmy</groupId>

    <artifactId>helloworld</artifactId>

    <version>1.0-SNAPSHOT</version>

    <name>Maven Hello World Project</name>

    <dependencies>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.7</version>

            <scope>test</scope>

        </dependency>

    </dependencies>

</project>

  配置文件中添加了dependencies元素,该元素可以包含多个dependency元素声明项目的依赖,这里添加的一个依赖---groupId是junit,artifactIdea是junit,version是4.7。

  groupId,artifactId,version是任何一个Maven项目的基本坐标,Junit也一样,有了这个声明,Maven就能自动的下载junit-4.7.jar。Maven有一个中央仓库http://repo1.maven.org/

下载需要的文件。junit的scope表示依赖范围,如果依赖范围为test表示该依赖只对测试时有效。依赖范围默认是compile。

  添加了依赖,然后编写java类,在src/test/java下创建com.lmy.helloworld.HelloWorldTest:

 

package com.lmy.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 World",result);

    }

}

然后在命令行执行mvn clean test:

Maven笔记(三):第一个Maven项目。


测试通过,项目编译运行之后就是打包,在pom没有指定打包类型,默认是jar,执行mvn clean package命令,在打包之前,会执行编译、测试等操作,然后将项目主代码打包到target目录下,文件名默认为artifactId-version.jar规则进行命名,也可以使用finalName自定义名称。

至此,就可以复制这个jar文件到其他项目的classpath中使用HelloWorld这个类,要让其他maven项目可以直接引用这个jar的话,还需要一个步骤,执行mvn clean install。

该操作会执行编译、测试、打包等命令,然后会把该jar文件放到本地仓库里面。这样就可以在其他Maven项目中引用这个jar了。

然后就是运行这个项目,HelloWorld自带了一个main方法。默认打包生成的jar是不能运行的,打开jar文件中的META-MANIFEST.MF文件,找不到Main-Class这一行。为了生成可执行的jar文件,需要借助maven-shade-plugin,配置该插件。

<build>

    <plugins>

    <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.lmy.helloworld.HelloWorld</mainClass>

                        </transformer>

                    </transformers>

                </configuration>

            </execution>

        </executions>

    </plugin>

    </plugins>

    </build>

配置了mainClass为com.lmy.helloworld.HelloWorld,项目打包时就会将该信息放到MANIFEST中。执行mvn clean install,构建完成后打开target目录,可以看到
helloworld-1.0-SNAPSHOT.jar和original-helloworld-1.0-SNAPSHOT.jar前者是带有main-class可以运行的,后者是原始的。

执行java -jar helloworld-1.0-SNAPSHOT.jar,输出结果:Hello World

 

你可能感兴趣的:(maven)