Hytale之我见 专注hytale服务器技术

maven简易教程

2019-10-26
hytaleme

maven是一个软件项目管理工具,基于POM(Project Object Model)来管理项目。

不用maven开发时,一方面项目可能有几十上百个依赖的jar包,手动管理非常麻烦,另一方面在多人协同开发时容易出现jar包不兼容的情况。

maven提供了统一的构建系统,可以使构建过程更简单,还可以提供项目信息,开发最佳实践,与透明地升级依赖。

一. maven介绍

maven的优缺点

优点

  • 简化了依赖管理
  • 易于上手
  • 依赖升级简单
  • 有很多插件便于扩展

缺点

  • 系统庞大,学习难度大
  • 约定优于配置,出问题难调试

同类比较

make

由Makefile脚本文件驱动,缺点是与操作系统绑定,不能跨平台.

Makefile的语法也成问题,Make构建失败往往是一个难以发现的tab或空格使用错误。

ant

构建脚本build.xml,学习曲线缓,上手容易,基于过程式编程。

缺点是xml不能很好贴合编程式过程,并且xml文件很容易大得无法管理。

maven

使用pom.xml,依靠约定,提供可调用的目标,可从网上自动下载依赖。

缺点是定制化目标困难,聚焦于依赖管理。xml配置文件较大。

gradle

Gradle不用XML,它使用基于Groovy的专门的DSL,简洁,样板代码少,灵活性高。

缺点是引入了新的语言,新的学习成本。 而且它太灵活了,虽然支持约定优于配置,但破坏约定非常容易,大部分情况下你并不需要自行扩展,如果你这么做了只会让构建变得难以理解,从这个角度看,自由也是把双刃剑。

二. maven学习

思维导图

以下是maven知识点的简易思维导图:

maven知识点思维导图

快速上手

安装配置

下载安装属基本操作,请参考网上文章。

由于maven中央仓库是国外的,连接速度慢,因此推荐配置maven中央仓库镜像为国内的阿里云镜像仓库,配置方法为修改maven根目录下的conf文件夹中的setting.xml文件,内容如下:

<mirrors>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

新建maven项目

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

运行后会下载大量文件,结束后maven项目目录大概是这样的:

my-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java

其中 src/main/java 是源码目录,/src/test/java 是测试源码目录,**pom.xml **就是项目的maven配置文件了。

构建

开发好后,需要构建项目打成jar包,可以在项目根目录(my-app)下输入下面的指令:

mvn package

可以在输出中看到 BUILD SUCCESS **字样,表示构建成功。 构建成功后会生成 **target **产出目录,在里面可以看到生成的jar包:my-app-1.0-SNAPSHOT.jar**

如果你想在构建前先清除旧的构建产出,可以输入多个目标(表示先清理再打包):

mvn clean package

此外,还可以生成项目信息的网页,输入:

mvn site

生成的网页在 **target/site **目录内

在IDE中使用maven

以上的指令是使用原生的maven指令来使用maven的方法,但实际在日常使用中,可能会更多地在IDE如ideavs code中使用maven,图形化的使用界面也会更加便捷,这里就不详细介绍了。


上一篇 hytale信息

目录