前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Maven入门

Maven入门

作者头像
_淡定_
发布2019-04-04 17:40:48
4420
发布2019-04-04 17:40:48
举报
文章被收录于专栏:dotnet & javadotnet & java

原文1

原文2

你要做的东西

通过Maven来构建一个显示当天时间的应用。

你需要的东西

  • 15分钟
  • 你喜欢的文本编辑器或者IDE
  • JDK 8 或者更新

如何完成这个指南

我是新手,走最基础的方式


创建项目

首先,你需要创建一个项目用来给Maven构建。把注意力集中到Maven上,项目做得尽可能简单。项目结构如下。

代码语言:javascript
复制
src
    main
        java
            hello

找个文件夹先创建一下目录 mkdir -p src/main/java/hello,然后创建2个类。HelloWorld.javaGreeter.java

代码如下:

代码语言:javascript
复制
package hello;

public class HelloWorld {
    public static void main(String[] args) {
        Greeter greeter = new Greeter();
        System.out.println(greeter.sayHello());
    }
}
代码语言:javascript
复制
package hello;

public class Greeter {
    public String sayHello() {
        return "Hello world!";
    }
}

这样就有了一个可以用Maven构建的项目,下一步就是要安装Maven。

安装Maven

Maven可以在链接下载。只需要二进制文件就好,像apache-maven-*{version}*-bin.zipapache-maven-*{version}*-bin.tar.gz这样的链接。

下载完成之后解压,然后把解压出来的bin目录添加到PATH环境变量中。

先检查一下JAVA_HOME环境变量的值。

代码语言:javascript
复制
echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

然后修改PATH的值

代码语言:javascript
复制
export PATH=/opt/apache-maven-3.6.0/bin:$PATH

然后用mvn -v测试一下

代码语言:javascript
复制
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)

成功安装。

跳过Maven Wrapper相关的介绍

定义一个简单的Maven构建

按照上面步骤装好Maven,现在需要创建一个Maven项目的定义文件。通过pom.xml来实现。这里可以指定项目的名称,版本,外部依赖项。

在项目的根目录创建一个_pom.xml_文件,和src文件夹同级,内容如下。

代码语言:javascript
复制
<?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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-maven</artifactId>
    <packaging>jar</packaging>
    <version>0.1.0</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>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>hello.HelloWorld</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

除了可选的<packaging>元素,这是一个最简单的用来构建项目的pom 配置文件。他包括以下几点:

  • <modelVersion> pom文件模型的版本。一直是4.0。
  • <groupId> 表示项目所属的组或组织,通常是反过来写的域名。
  • <artifactId> 项目最后生成的文件的名字,比如jar 或者 war文件的名字。
  • <version> 项目的版本。
  • <packaging> 打包的方式,默认是jar,也可以指定war。

当选择版本的时候,建议使用 链接方式。

编译java代码

现在可以用Maven来编译你的项目了。可以用Maven做到以下几点:

  • 编译你的项目代码
代码语言:javascript
复制
mvn compile

完成之后在 target/classes 目录下会生成编译好的.class 文件。

  • 创建jar包
代码语言:javascript
复制
mvn package

package命令会编译代码+运行测试+生成jar文件。jar文件名是依据pom里面设置的artifactId和version来的。

  • 在本地Maven仓库安装依赖

Maven也会在本机上维护依赖项。通常是在.m2/repository目录以便下次用到的时候尽快访问到。如果你想把你项目的jar文件安装到本地仓库,你需要使用install命令。

代码语言:javascript
复制
mvn install

这个命令会编译,测试,打包你的代码,然后安装到本地仓库,用于其他项目的依赖引用。

声明依赖项

上面的项目很简单,没有依赖其他任何库。但通常来说,大部分项目都是需要依赖外部库来处理一系列问题。

举个例子说,我们需要使用Joda这个库来打印当前时间。

首先改一下HelloWorld.java的代码。

代码语言:javascript
复制
package hello;

import org.joda.time.LocalTime;

public class HelloWorld {
    public static void main(String[] args) {
        LocalTime currentTime = new LocalTime();
        System.out.println("The current local time is: " + currentTime);
        Greeter greeter = new Greeter();
        System.out.println(greeter.sayHello());
    }
}

如果直接运行mvn compile,编译会报错。我们需要在<project>节点中增加下面内容。

代码语言:javascript
复制
<dependencies>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.2</version>
        </dependency>
</dependencies>

上面的xml定义了项目需要用到的依赖项。group,artifactId,version和上面的意思一样。dependency默认的作用域是compile,这意味着他们的在编译期间是可用的。可以通过<scope>来指定他们的作用域。还有两种:

  1. provided 编译+运行时可用。
  2. test编译+测试时可用,运行时不可用。

再次运行compile,mvn就会去下载对应的dependency。

编写测试

第一步,添加一下JUnit依赖到pom.xml文件中,作用域是test。

代码语言:javascript
复制
<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
</dependency>

创建一个src/test/java/hello/GreeterTest测试用例

代码语言:javascript
复制
package hello;

import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.*;

import org.junit.Test;

public class GreeterTest {

    private Greeter greeter = new Greeter();

    @Test
    public void greeterSaysHello() {
        assertThat(greeter.sayHello(), containsString("Hello"));
    }

}

Maven使用surefire插件来运行单元测试。默认的配置是运行所有src/test/javaTest结尾的类。下面来运行。

小结

恭喜,你完成了。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你要做的东西
  • 你需要的东西
  • 如何完成这个指南
  • 创建项目
    • 安装Maven
    • 定义一个简单的Maven构建
    • 编译java代码
    • 声明依赖项
    • 编写测试
    • 小结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com