JavaRush /Java Blog /Random-JA /Maven について知りたかったすべて。(パート 2) - 「Java プロジェクトの A から Z まで」
Roman Beekeeper
レベル 35

Maven について知りたかったすべて。(パート 2) - 「Java プロジェクトの A から Z まで」

Random-JA グループに公開済み
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 したがって、メソッドとそれに対する 2 つのテストを持つクラスを追加しましょう。Maven 用の通常のフォルダー スキームを作成しましょう。
src メイン Java リソース テスト Java リソース
src/main/java で、作業するパッケージを作成します。正しく構成するには、組織の名前 ( groupId ) を先頭に置き、その後にプロジェクトの名前を置くと良いでしょう。私たちの場合、それは次のようになります: com.github.javarushcommunity.mavendemo 私にとって、これは非常に良いパッケージです。その中にImageComparatorクラスを作成し、それに対して 2 つのテストを作成します。

Maven とプロジェクト全体を IDEA に接続する

アイデアが依存関係を認識し、プロジェクトでの使用を提案できるようにするには、いくつかのことを行う必要があります。
  1. コードソースがどこにあり、テストがどこにあるのかを伝えます。
  2. Maven プロジェクトをアイデアに追加します。
1 つ目を達成するには、このアイコンを見つける必要があります。アイコン「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 - 2をクリックして、[モジュール]セクションに移動します。次に、以下の図に示すように、作成したフォルダーに必要なマーカーを付ける必要があります「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 ~ 3
  • src/main/java - ソース
  • src/main/resources - リソース
  • src/test/java - テスト
  • src/test/resources - テストリソース
  • ターゲット- 除外
これらすべてのソース、リソース、テスト、テスト リソース、および除外は、 「Mark as」と書かれている行にあります。フォルダーを選択し、それに応じてラベルを付けます。2 番目のステップは、Maven プロジェクトを IDEA に追加して、その魔法が使えるようにすることです。これを行うには、IDEA で pom.xml ファイルを見つけ、右クリックして [ Maven プロジェクトとして追加]を選択する必要があります。これだけで、あなたは幸せになります (:この後、「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今後のテストの設定を選択するよう求められます。何もインストールせず、[OK] をクリックするだけです。「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 ~ 7テストでは、テスト イメージから画像比較を取得し、テスト リソース (src/test/resource) に配置します。この後、2 つのテストを作成します。これら 2 つの写真が異なることを確認します。そしてもう一方では、同じ写真を送信し、それらが同じであるという答えを期待します。次に、次のテストが得られます。
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 プラグインでプロジェクトを選択し、その中でライフサイクルを開きます。「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 ~ 8次に、[コンパイル]をクリックして何が起こったかを確認します「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 ~ 9。ここから、2 つの結論を引き出すことができます。
  1. ソースはコンパイルされ、指定されたパスに配置されました。
  2. コマンドは成功しました - BUILD SUCCESS。
実際、プロジェクト構造に移動して、そこで何が変更されたかを確認すると、ターゲットフォルダーが追加されていることがわかります。これを引き続き探索して、コンパイル済みのImageComparatorクラスを見つけることができます。「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 - 10さて、新しいパッケージを開始したいと思います最初からコマンドを実行します。これを行うには、 cleanコマンドを実行します (2 回クリックします) 。「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 ~ 11その結果、ターゲットフォルダーが削除されたことがわかります。このフォルダーには、コンパイルコマンドの後に作成されたすべてのものが含まれています。コマンドtestを実行しましょう: 「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 - 12Tests run: 0... ただし、2 つも書きました。つまり、何らかの理由でテストが実行されませんでした。ライブ コーディングはそのようなものです。Web に行きましょう) 5 分間グーグルで調べた結果、JUnit5 ではプラグインをもう 1 つ追加する必要があることがわかりました。
<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さて、話は別です。2 つのテストが実行され、成功しました。火!ここで、パッケージを実行し、ターゲットフォルダーで jarnik が見つかることを期待します。「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 - 14つまり、テストに合格したことが再度わかります。この後 (プロジェクト内のすべてが良好であることが保証され)、プロジェクトをアーカイブ。この図は、Maven 起動ログとプロジェクト構造にアーカイブがあることを示しています。次に、 installを行います。素晴らしいチーム。ああ、忘れる前に。新しいコマンドを実行する前に、 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-スナップショット そして、ターミナルに移動して、アーカイブが存在するフォルダーに入ろうとすると、アーカイブはそこにあります。deploy では「Java プロジェクトの A から Z まで」: Maven について知りたかったすべて。 パート 2 - 16表示されず、他のものはまだ必要ありません...

アウトプットの代わりに

今日は、Maven とは何か、そこに何があるのか​​、そこにある主なコマンドは何なのかを簡単に説明しました。これを例を挙げて簡単に伝えてみました。この例のすべてのソース コードは、GitHub の JavaRush Community 組織のmaven-demoプロジェクトにあります。すべての質問をコメントに記入してください。いつものように、JRTB プロジェクトの新しいコードを見逃さないように、Github で私のアカウントを購読することをお勧めします。もう一度言いますが、彼は死んではいません。彼は単に停滞していました))

シリーズのすべてのマテリアルのリストは、この記事の冒頭にあります。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION