大家好,亲爱的朋友们。我马上道歉:我记得我答应过每周写一篇文章。没有成功。我只是还没有抽出时间坐下来好好地写作,但我不想这样做或那样做。我不会抱怨原因,因为我不需要它,你当然也不感兴趣。该项目并没有死,它处于停滞状态:)我们继续!今天的材料专门针对 Maven。
克隆了。
我们来谈谈Maven
首先您需要安装它。当然,由于我有Mac,所以只能展示Mac的安装。只是运气不好而已。我很久以前就安装了它,所以你必须自己安装:)本材料中有安装 Maven 的说明。 |
为什么我们需要 Maven?
Maven 是一个项目构建工具,与 Gradle 和 Ant 一样。因为我将在 JRTB(JavaRush Telegram Bot)中使用它,所以我想向您介绍最新情况。如今,没有一个项目是在没有装配系统的情况下创建的,因为它多次简化了我们的生活。这允许:- • 拉起所有必要的库(就组装工具而言——依赖关系(即依赖关系));
- • 准确确定项目需要如何组装以及组装成什么(例如,我们想要将其收集在 WAR 或 JAR 或可执行 JAR 中);
- • 将项目版本设置在一处,以便在组装过程中得到指示;
- • 描述项目及其生命周期;
- • 添加所谓的插件(英文单词Plugin 的繁体版本);
- • 在共享存储库中发布库,以便其他项目可以将它们作为依赖项提取。
pom.xml 是一切的头
您需要的一切都在 pom.xml 中。有关项目、其开发人员以及项目存储在哪个远程存储库的所有信息。首先,我们对以下块感兴趣: <project/> - 这是主块,其中包含有关项目的所有信息。所有其他人都将明确或传递地参与其中。在开始标签里面写着这样的内容:<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
最重要的是,下一行也是用所有 pomnik 编写的(该俚语据说来自 pom.xml :))。
<modelVersion>4.0.0</modelVersion>
但接下来它会变得更有趣:我们将描述我们如何识别我们的纪念馆所描述的项目。以我的库为例,我将描述它,然后我们将它添加到我们的内存中,添加到新创建的项目中:
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Image Comparison</name>
这里主要的事情是:
- • groupId是开发组织或单个工程师的标识符。这通常是域的相反顺序。作为示例,此处描述了 Github 上的romankh3帐户。这是非常重要的。假设 Spring 生态系统是com.springframework。这样你就可以区分原始项目和其他人的分支,或者仅仅通过项目名称的重合来区分。
- • artifaceId已经是该内存中描述的特定项目的名称。
- • version——该项目的版本。这里的一切都一目了然:添加了新功能,修复了旧功能,重构或进行了一些其他更改 - 增加了版本。
- •打包- 这里我们描述Maven 应如何组装我们的项目。要么在罐子里,要么在战争里,或者其他一些地方。
- •名称- 这是一个更令人愉悦的项目名称。
- • 项目存储库的路径,可以从其中下载
<url>https://romankh3.github.io/image-comparison/</url>
- • 分发此项目所依据的许可证。而且,可能不止一个,因此需要这样设置:
<licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> </licenses>
- • 有关创建/正在创建项目的开发人员的信息:
<developers> <developer> <id>romankh3</id> <name>Roman Beskrovnyi</name> <email>roman.beskrovnyy@gmail.com</email> </developer> </developers>
- • scm 块,描述如何访问项目:
<scm> <connection>git@github.com:romankh3/image-comparison.git</connection> <developerConnection>git@github.com:romankh3/image-comparison.git</developerConnection> <url>https://github.com/romankh3/image-comparison</url> </scm>
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.26.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
这里我添加了两个库用于测试:它们总是需要的。您可能已经注意到,依赖项有一个 Scope - 范围。在我们的例子中,指定了测试,这意味着我们根本不会在主代码中看到这种依赖关系。接下来,为了让一切看起来很漂亮,您可以使用单独的标签来显示<properties/>版本:
<properties>
<mockito.version>2.26.0</mockito.version>
<junit.version>5.5.2</junit.version>
<image.comparison.version>4.3.0</image.comparison.version>
</properties>
因此可以使用${PROPERTY_NAME}构造更新依赖项块:
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>${image.comparison.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
接下来是一个大的<build/>块,其中包含一个重要的<plugins/>块,您可以使用它自定义构建过程。您可以在<plugins/>块中添加一个或多个插件,如下所示:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
在这里你可以看到我添加了两个插件 - maven-source-plugin和maven-javadoc-plugin。每个插件都有可以设置的设置、属性(参数),从而自定义插件。未来这对我们来说会很有趣。现在,让我们记住并继续前进。与依赖项相同,我们将插件版本放入<properties/>中。在此基础上,您可以创建以下内存:
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
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.github.javarushcommunity</groupId>
<artifactId>maven-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Maven Demo Project</name>
<url>https://github.com/javarushcommunity/maven-demo/</url>
<properties>
<mockito.version>2.26.0</mockito.version>
<junit.version>5.5.2</junit.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<source.plugin.version>3.2.0</source.plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${source.plugin.version}</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${javadoc.plugin.version}</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Maven 生命周期
Maven 有一个叫做 Maven 生命周期的东西。值得说的是,这是 Maven 可以执行的一组任务。除了maven生命周期之外,可能还有其他任务。这是关于什么的?有一组命令可以用来组装一个项目(再次构建,当然,是英文的描图纸,但没有这个就无处可去),删除 Maven 收集的构建,安装在 Maven 本地,这样你就可以在本地拉取项目作为依赖项,等等。现在让我们更详细地讨论一切。在写下我对这些团队的看法之前,我决定阅读他们在互联网上写的关于此事的内容……并意识到这很难描述。对于工作,对于初始工作,我们需要几个命令。让我们来描述一下它们:- •编译— 编译项目。这是第一阶段:在此期间您可以查看项目中是否存在任何编译错误。有时在IDEA中工作会出现各种跨越,这就是为什么编译问题出现在不应该存在的地方。所以这个命令会点所有的 i。
- • test - 运行在JUnit 上运行的所有测试,并且位于Maven 期望的位置(src/test/java是您的队长)。
- • package是下一个命令,它包括前面的两个命令:即首先在其中启动compile命令,然后将test命令发送到编译后的项目,如果这里一切正常,则开始创建存档(我们在<packaging/>中选择的存档))
- • install — когда мы устанавливаем Мавен на машину, у нас появляется локальный гит-репозиторий, в котором хранятся библиотеки, которые мы скачиваем для проектов. Но прелесть Мавена заключается еще и в том, что мы при помощи команды install можем добавить наш проект в локальный гит-репозиторий и локально использовать наш проект How зависимость. Не верите? Попробуйте :) Таким образом можно достаточно быстро посмотреть, How будет выглядеть ваш проект How зависимость у другого.
- • deploy — это венец всего, что было до этого. Команда, которая дарит возможность добавлять проект не только в локальный репозиторий How install, но и на удаленный, откуда каждый человек с доступом сможет использовать его How зависимость.
- • verify — команда, которая все проверит и скажет, готов ли проект к деплою.
- • clean — разумеется, скомпorрованные файлы и архив где-то должны храниться. Для этого у Мавена есть папка target. Это данные, которые проекту не нужны. И перед тем, How собирать проект заново, хорошо бы удалить все, что было до этого. Вот для этого и служит команда clean.
GO TO FULL VERSION