JavaRush /Java 博客 /Random-ZH /您想了解的关于 Maven 的一切。(第 2 部分)-“Java 项目从头到尾”
Roman Beekeeper
第 35 级

您想了解的关于 Maven 的一切。(第 2 部分)-“Java 项目从头到尾”

已在 Random-ZH 群组中发布
关于Maven的一切:我喜欢实践的开始。你甚至无法想象有时写理论是多么乏味。尽管如此,哪里都没有她。当然,实践是另一回事。现在让我们快速浏览一下我之前描述的命令,然后我们就完成了)“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 1 部分

设置 pom.xml

当我们进行理论分析时,我们得到了一个非常好的 pom.xml:
查看代码
<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>

   <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>
       <connection>git@github.com:javarushcommunity/maven-demo.git</connection>
       <developerConnection>git@github.com:javarushcommunity/maven-demo.git</developerConnection>
       <url>https://github.com/javarushcommunity/maven-demo</url>
   </scm>

   <properties>
       <mockito.version>2.26.0</mockito.version>
       <junit.version>5.5.2</junit.version>
       <image.comparison.version>4.3.0</image.comparison.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>
       <javadoc.plugin.version>3.1.1</javadoc.plugin.version>
       <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>
       <dependency>
           <groupId>com.github.romankh3</groupId>
           <artifactId>image-comparison</artifactId>
           <version>${image.comparison.version}</version>
       </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>
- 但是为了编译一些东西,需要将其添加到那里!符合逻辑吗?- 是的,队长。bgg 因此,让我们添加一个类,该类将具有一个方法和两个测试。让我们为 Maven 创建一个常规文件夹方案:
src 主要java资源 测试java资源
src/main/java中,我们将创建一个我们将在其中工作的包。为了正确地编写它,最好将组织的名称(groupId)放在开头,然后是项目的名称。在我们的例子中,它将是这样的: com.github.javarushcommunity.mavendemo 对于我来说,这是一个非常好的包。在其中我们将创建ImageComparator类,我们将为其编写两个测试。

将 Maven 和项目作为一个整体连接到 IDEA

为了让这个想法能够识别我们的依赖关系并在项目​​中使用它们,我们需要做几件事:
  1. 告诉我们代码源在哪里以及测试在哪里。
  2. 将 Maven 项目添加到想法中。
要实现第一个目标,您需要找到此图标:“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 2 部分单击它并转到“模块”部分。接下来,需要给创建的文件夹赋予所需的标记,如下图所示:“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 3 部分即:
  • src/main/java - 来源
  • src/main/resources - 资源
  • src/test/java - 测试
  • src/test/resources - 测试资源
  • 目标- 排除
所有这些来源、资源、测试、测试资源和排除都可以在标记为的行中找到。选择一个文件夹并为其添加相应的标签。第二步是将maven项目添加到IDEA中,以便它可以发挥其魔力。为此,需要在IDEA中找到pom.xml文件,右键选择Add as Maven Project。就是这样,你会很高兴的(:之后,“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 4 部分右侧会出现一个Maven板块,你可以在里面打开并运行Maven命令。“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 5 部分

我们为我们的“项目”编写源代码和测试

因此,我们将 Maven 添加到这个想法中,现在让我们描述将充当我们的源的类:

图像比较器:

package com.github.javarushcommunity.mavendemo;

import com.github.romankh3.image.comparison.ImageComparison;
import com.github.romankh3.image.comparison.model.ImageComparisonResult;
import com.github.romankh3.image.comparison.model.ImageComparisonState;

import java.awt.image.BufferedImage;

/**
* Class created for answering, does two images the same or not.
*/
public class ImageComparator {

   /**
    * Method, which says the same images or not.
    *
    * @param image1 image1 for comparison
    * @param image2 image2 for comparison
    * @return return true, if images are the same, false - otherwise.
    */
   public boolean isTheSameImages(BufferedImage image1, BufferedImage image2) {
       //Create ImageComparison object
       ImageComparison imageComparison = new ImageComparison(image1, image2);

       //Compare images
       ImageComparisonResult imageComparisonResult = imageComparison.compareImages();

       //Check, that ImageComparisonState is MATCH:
       return ImageComparisonState.MATCH == imageComparisonResult.getImageComparisonState();
   }
}
让我们为此目的创建测试。测试的类必须在同一个包中,只能在 src/test/java 中。这个想法知道这一点,并且您可以利用它的功能。为此,请单击文件本身中的类名,然后在出现的灯泡上选择“创建测试”:“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 6 部分我们将被要求选择未来测试的设置。我们不安装任何东西,只需单击“确定”:“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 7 部分对于我们的测试,我们将从测试图像中进行图像比较并将它们放入测试资源(src/test/resource)中。之后我们将编写两个测试。人们将检查这两张图片是否不同。在另一个中,我们将传输相同的图片并期望得到它们是相同的答案。然后我们得到如下测试:
package com.github.javarushcommunity.mavendemo;

import com.github.romankh3.image.comparison.ImageComparisonUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.awt.image.BufferedImage;

@DisplayName("Unit-level testing for ImageComparator")
class ImageComparatorTest {

   private final ImageComparator comparator = new ImageComparator();

   @Test
   public void shouldConfirmImagesNotTheSame() {
       //given
       BufferedImage image1 = ImageComparisonUtil.readImageFromResources("image1.png");
       BufferedImage image2 = ImageComparisonUtil.readImageFromResources("image2.png");

       //when
       boolean theSameImages = comparator.isTheSameImages(image1, image2);

       //then
       Assertions.assertFalse(theSameImages);
   }

   @Test
   public void shouldConfirmImagesTheSame() {
       //given
       BufferedImage image1 = ImageComparisonUtil.readImageFromResources("image1.png");

       //when
       boolean theSameImages = comparator.isTheSameImages(image1, image1);

       //then
       Assertions.assertTrue(theSameImages);
   }
}
测试很简单,我就不多说了。如果您有兴趣,我有一天会写一篇关于测试的文章(在评论中写一下)。

执行Maven命令

现在,当一切准备就绪,可以看到团队的工作时,在 Maven 插件中选择我们的项目并在其中打开Lifecycle“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 8 部分现在单击编译,看看发生了什么:“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 9 部分由此我们可以得出两个结论:
  1. 我们的源代码已编译并放置在指定的路径中。
  2. 命令成功 - BUILD SUCCESS。
实际上,如果我们转到项目结构并查看那里发生了什么变化,我们将看到目标文件夹已被添加,我们仍然可以探索并找到我们编译的ImageComparator类:“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 10 部分现在我想开始一个新包从头开始命令。为此,让我们运行(单击两次)clean命令:“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 11 部分结果,我们被告知已删除目标文件夹,其中包含编译命令后创建的所有内容。让我们运行命令test“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 12 部分Tests run: 0...但我们写了多达两个。也就是说,由于某种原因测试没有运行。实时编码就是这样,让我们​​上网吧)经过 5 分钟的谷歌搜索,我发现使用 JUnit5 你需要再添加一个插件:
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
让我们将它添加到项目中,尽可能将版本放入<properties/>中,然后重新启动测试“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 13 部分现在是另一回事了!进行了两次测试并取得了成功。火!现在我们运行我们的包并期望我们会在目标文件夹中找到jarnik :“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 14 部分也就是说,我们再次看到测试已经通过,之后(保证项目中的一切都很好)我们可以将项目收集到一个档案。该图显示maven启动日志和项目结构中有一个存档。接下来我们进行安装。很棒的团队。哦,在我忘记之前。在执行新命令之前通过运行clean来清理项目被认为是很好的做法。这将使您免于将来胡言乱语 - 我以我自己的经验保证)))因此,首先我们运行clean,然后install“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 15 部分箭头所在的位置,您可以清楚地看到本地存储库所在的位置。根据他们写的内容,这是我的方式: /Users/roman_beskrovnyi/.m2 存档本身将位于此处: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0-快照 如果我们进入终端并尝试进入存档所在的文件夹,那么它就会在那里:“Java 项目从 A 到 Z”:您想了解的有关 Maven 的一切。 第 2 - 16 部分部署不会向我们显示,而且您还不需要其他的...

而不是输出

今天我们快速了解了 Maven 是什么,里面有什么,里面有哪些主要命令。我试图通过例子简单地表达这一点。该示例的所有源代码都位于 GitHub 上 JavaRush 社区组织的maven-demo项目中。将所有问题写在评论中。像往常一样,我建议您在 Github 上订阅我的帐户,以免错过我们 JRTB 项目的新代码。再说一次,他没有死。他只是处于停滞状态))

该系列所有材料的列表位于本文开头。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION