Maven入门指南(基于Linux)

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

在Java开发中,Maven的地位已经不言而喻了,相比起Ant它更优秀,当然在gradle面前,Maven也存在着臃肿的问题,可以说Maven也会朝着更简洁的方向发展,就像Spring也在逐渐的去除繁重的xml配置,更不用提Java10各种提案的激进思路,但是如今国内外Maven的使用依旧是比较主流。

我们今天基于Ubuntu-server 17版本进行Maven项目的构建。

由于Maven是有自己的文件目录结构的:
这里写图片描述

但其最基本只需要java源码目录

└── src
    └── main
        └── java
            └── 我们自己的包

我们在Linux下创建自己的目录,包的名字为hello(对应的文件夹名相同)

mkdir -p src/main/java/hello

此时我们新建两个Java类文件,分别为src/main/java/hello/HelloWorld.java

package hello;

public class HelloWorld {
    public static void main(String[] args) {
        Greeter greeter = new Greeter();
        System.out.println(greeter.sayHello());
    }
}

以及src/main/java/hello/Greeter.java

package hello;

public class Greeter {
    public String sayHello() {
        return "Hello world!";
    }
}
要注意的是包名要和文件夹同名,类名要和文件同名(JAVA最基础的部分)

此时我们已经根据Maven的目录结构搭建好了自己的目录和类文件,在Ubuntu(17及以上版本)下,使用

apt install maven

下载安装maven,输入mvn -version,可以看到Maven安装成功

这里写图片描述

然后我们回到 src 的上级目录,新建文件 pom.xml ,这个是Maven构建项目的配置文件,其中给出了项目名称,版本号,项目描述以及依赖库等。

<?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>

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

写入pom.xml

这里写图片描述

这是此时的项目结构目录

1. 在当前目录下,使用Maven进行编译

 mvn compile

看到如下运行结果,说明编译成功

这里写图片描述

编译成功以后可以查看目录结构,你会发现编译后的.class文件存在于 target 目录下,进图 classes 目录下,可以使用 java hello.HelloWorld 启动JVM运行项目

这里写图片描述

2.在当前目录下,使用Maven进行打包

mvn package

使用此命令,Maven会将当前Java项目进行打包处理,默认生成.jar包(当然也可以通过配置生成.war包,只需要更改pom.xml文件中的packaging属性为war
这里写图片描述
可以看到 target/ 目录下的 gs-maven-0.1.0.jar (maven会使用artifactIdversion的形式命名)

3.在当前目录下,将当前项目安装进Maven本地仓库

Maven有三种依赖仓库:1.中央仓库 2.本地仓库 3.远程仓库

  1. Maven中央仓库 是Maven官方的远程仓库,在能连接到服务器的情况下,Maven项目中的依赖库可以从中央仓库下载到本地仓库
  2. 本地仓库是Maven在本机上的依赖包仓库,添加依赖包以后Maven会优先从本地仓查找是否存在依赖包,若不存在,则去中央仓下载。
  3. 若中央仓库服务器无法连接(比如公司内网环境),Maven会去远程仓库下载,一般公司内搭建有自己的远程仓库。

而我们可以把自己的项目打包,并放入本地仓,以后的项目如果用到该项目文件,则可以直接使用Maven引入依赖。

mvn install

成功以后,可以去Maven本地仓查看是否已经存在自己的项目,Ubuntu默认的本地仓库是 /root/.m2/repository/

cd /root/.m2/repository/

根据pom.xml文件中 groupIdorg.springframework

我们可以看到我们的项目已经被打包放入Maven本地仓
这里写图片描述

这里要说明一点,关于Maven本地仓位置:

配置在Maven安装目录下的 conf/settings.xml内
ubuntu17默认为 /usr/share/maven/conf/settings.xml

其中本地仓的目录配置在

这里写图片描述

可以看到默认目录是{user.home}/.m2/repository,因为我在root用户下安装,所以我的默认仓在/root/.m2/repository下(当然可以手动改动)

4.在项目中,使用Maven自动引入依赖包

这是Maven尤其重要的特性,只需要配置pom.xml文件,就再也不需要去手动配置BuildPath,然后把各种依赖库的包加入到文件夹里了。

比如常见的 MySQL Connector,我们平时需要手动下载,然后把它放到Java项目的BuildPath中(以eclipse构建项目为例)

这里写图片描述

而有了Maven构建项目以后,我们只需要去中央仓库搜索mysql,找到对应的包

这里写图片描述

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

把依赖包的具体信息(groupId,artifactId,version),添加到自己项目的pom.xml 中,就可以在项目中随意的使用这些依赖包了。

    <version>0.1.0</version>

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


<!-- 下面是新添加的代码块,dependencies元素要在project内 -->
    <dependencies>
    <!-- 每一个 dependency 元素信息可以从Maven中央仓找到 -->
            <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>6.0.6</version>
            </dependency>
    </dependencies>

</project>

这样再使用Maven编译或者打包项目,依赖的包就可以自动下载并且正常引入(import)到项目中。


本文基于:
Spring GETTING STARTED -Building Java Projects with Maven

参考资料:
https://www.cnblogs.com/ysocean/p/7420373.html
https://maven.apache.org/plugins/maven-compiler-plugin/index.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值