質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

Apache Maven

Apache Mavenは、ソフトウェアプロジェクトの管理ツールです。

CI(継続的インテグレーション)

CI(継続的インテグレーション)は、アプリ開発においてビルドとテストを繰り返すことで品質改善と納期短縮を図る手法です。JenkinsやTravis CIなどの専用ツールを利用してプロセスを自動化・半自動化して効率的に実施します。

Q&A

解決済

1回答

2759閲覧

Mavenプロジェクトでのテストコードのクラスのビルドエラーの解消法

Kawboy442

総合スコア14

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

Apache Maven

Apache Mavenは、ソフトウェアプロジェクトの管理ツールです。

CI(継続的インテグレーション)

CI(継続的インテグレーション)は、アプリ開発においてビルドとテストを繰り返すことで品質改善と納期短縮を図る手法です。JenkinsやTravis CIなどの専用ツールを利用してプロセスを自動化・半自動化して効率的に実施します。

0グッド

0クリップ

投稿2021/07/25 05:36

編集2021/07/25 05:41

現在、MavenプロジェクトへGitHub Actionsを用いてCIを導入しようとしているのですが、下記のようなワークフローのymlファイルでビルドを行うと、テストコードの部分でビルドエラーが発生し、ビルドが出来ない状態でおります。

yml

1# This workflow will build a Java project with Maven 2# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 4name: Java CI with Maven 5 6on: 7 push: 8 branches: [ main ] 9 pull_request: 10 branches: [ main ] 11 12jobs: 13 build: 14 15 runs-on: ubuntu-latest 16 17 steps: 18 - uses: actions/checkout@v2 19 - name: Set up JDK 8 20 uses: actions/setup-java@v2 21 with: 22 java-version: '8' 23 distribution: 'adopt' 24 - name: Build with Maven 25 run: mvn -B package --file pom.xml

エラー内容は下記のように、package org.junit does not existと、ユニットテストのあるクラスにおいてcannot find symbolとなってしまっているので、上記のymlのワークフローで実行している、mvn -B package --file pom.xmlのMavenプロジェクトのビルド時に、JUnitのライブラリのパッケージ読み込みに問題が発生しているものと推測しております。

ErrorMessage

12021-07-24T12:09:35.1081503Z [INFO] 24 errors 22021-07-24T12:09:35.1082509Z [INFO] ------------------------------------------------------------- 32021-07-24T12:09:35.1083403Z [INFO] ------------------------------------------------------------------------ 42021-07-24T12:09:35.1084179Z [INFO] BUILD FAILURE 52021-07-24T12:09:35.1084978Z [INFO] ------------------------------------------------------------------------ 62021-07-24T12:09:35.1116178Z [INFO] Total time: 8.300 s 72021-07-24T12:09:35.1118245Z [INFO] Finished at: 2021-07-24T12:09:35Z 82021-07-24T12:09:35.1132705Z [INFO] ------------------------------------------------------------------------ 92021-07-24T12:09:35.1198182Z [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project food_share_web: Compilation failure: Compilation failure: 102021-07-24T12:09:35.1201119Z [ERROR] /home/runner/work/food_share_web/food_share_web/src/test/TestTimestampUtil.java:[3,24] package org.junit does not exist 112021-07-24T12:09:35.1203527Z [ERROR] /home/runner/work/food_share_web/food_share_web/src/test/TestTimestampUtil.java:[7,17] package org.junit does not exist 122021-07-24T12:09:35.1205781Z [ERROR] /home/runner/work/food_share_web/food_share_web/src/test/TestTimestampUtil.java:[29,10] cannot find symbol 132021-07-24T12:09:35.1207252Z [ERROR] symbol: class Test 142021-07-24T12:09:35.1208255Z [ERROR] location: class test.TestTimestampUtil

色々と試してみた結果、下記のpom.xmlにて定義している<dependencies>の中のjunitの項目の<scope>test</scope>の部分を削除することで、warファイルのビルドが成功することが出来ました。

xml

1<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>jp.example</groupId> 5 <artifactId>food_share_web</artifactId> 6 <version>0.0.1-SNAPSHOT</version> 7 <packaging>war</packaging> 8 <build> 9 <sourceDirectory>src</sourceDirectory> 10 <plugins> 11 <plugin> 12 <artifactId>maven-compiler-plugin</artifactId> 13 <version>3.5.1</version> 14 <configuration> 15 <source>1.8</source> 16 <target>1.8</target> 17 </configuration> 18 </plugin> 19 <plugin> 20 <artifactId>maven-war-plugin</artifactId> 21 <version>3.0.0</version> 22 <configuration> 23 <warSourceDirectory>WebContent</warSourceDirectory> 24 </configuration> 25 </plugin> 26 <plugin> 27 <groupId>com.heroku.sdk</groupId> 28 <artifactId>heroku-maven-plugin</artifactId> 29 <version>3.0.4</version> 30 <configuration> 31 <appName>${heroku.appName}</appName> 32 </configuration> 33 </plugin> 34 </plugins> 35 </build> 36 <dependencies> 37 <dependency> 38 <groupId>mysql</groupId> 39 <artifactId>mysql-connector-java</artifactId> 40 <version>5.1.45</version> 41 </dependency> 42 <dependency> 43 <groupId>org.hibernate</groupId> 44 <artifactId>hibernate-core</artifactId> 45 <version>5.2.13.Final</version> 46 </dependency> 47 <dependency> 48 <groupId>org.apache.taglibs</groupId> 49 <artifactId>taglibs-standard-impl</artifactId> 50 <version>1.2.5</version> 51 </dependency> 52 <dependency> 53 <groupId>javax.servlet.jsp.jstl</groupId> 54 <artifactId>javax.servlet.jsp.jstl-api</artifactId> 55 <version>1.2.1</version> 56 </dependency> 57 <dependency> 58 <groupId>javax.servlet</groupId> 59 <artifactId>javax.servlet-api</artifactId> 60 <version>3.0.1</version> 61 <scope>provided</scope> 62 </dependency> 63 <dependency> 64 <groupId>junit</groupId> 65 <artifactId>junit</artifactId> 66 <version>4.11</version> 67 <scope>test</scope> 68 </dependency> 69 </dependencies> 70</project>

しかし、CI実行結果のログをよく見るとユニットテストの実行がスキップされている結果になり、対処療法的な処置になってしまいました。
CIでのユニットテストの実行がされないのであれば導入した意味がないので、なんとかCIの実行時にユニットテストが動作するようにしたいと思っております。

このビルドエラーの根本的な解決方法について、ご存知の方がおりましたらぜひともご教授いただければ幸いです。

また、上記以外で必要な情報が必要な場合、当然自分からも提供いたしますが、下記のGitHubレポジトリも参考にしていただけたらと思います。
https://github.com/Kawboy442/food_share_web/tree/feature/%2395-Setting-up-a-CI

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

他サイトでも質問したところ、回答をいただきましたので共有のため転記いたします。

https://ja.stackoverflow.com/questions/78391/maven%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%a7%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%ae%e3%82%af%e3%83%a9%e3%82%b9%e3%81%ae%e3%83%93%e3%83%ab%e3%83%89%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%ae%e8%a7%a3%e6%b6%88%e6%b3%95

最終的には、ディレクトリ構成を回答のように変更した後、下記のようにpom.xmlの10行目に<testSourceDirectory>test</testSourceDirectory>を追加することで、テストコードの実行とビルドが完了いたしました。

xml

1<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>jp.example</groupId> 5 <artifactId>food_share_web</artifactId> 6 <version>0.0.1-SNAPSHOT</version> 7 <packaging>war</packaging> 8 <build> 9 <sourceDirectory>src</sourceDirectory> 10 <testSourceDirectory>test</testSourceDirectory> 11 <plugins> 12 <plugin> 13 <artifactId>maven-compiler-plugin</artifactId> 14 <version>3.5.1</version> 15 <configuration> 16 <source>1.8</source> 17 <target>1.8</target> 18 </configuration> 19 </plugin> 20 <plugin> 21 <artifactId>maven-war-plugin</artifactId> 22 <version>3.0.0</version> 23 <configuration> 24 <warSourceDirectory>WebContent</warSourceDirectory> 25 </configuration> 26 </plugin> 27 <plugin> 28 <groupId>com.heroku.sdk</groupId> 29 <artifactId>heroku-maven-plugin</artifactId> 30 <version>3.0.4</version> 31 <configuration> 32 <appName>${heroku.appName}</appName> 33 </configuration> 34 </plugin> 35 </plugins> 36 </build> 37 <dependencies> 38 <dependency> 39 <groupId>mysql</groupId> 40 <artifactId>mysql-connector-java</artifactId> 41 <version>5.1.45</version> 42 </dependency> 43 <dependency> 44 <groupId>org.hibernate</groupId> 45 <artifactId>hibernate-core</artifactId> 46 <version>5.2.13.Final</version> 47 </dependency> 48 <dependency> 49 <groupId>org.apache.taglibs</groupId> 50 <artifactId>taglibs-standard-impl</artifactId> 51 <version>1.2.5</version> 52 </dependency> 53 <dependency> 54 <groupId>javax.servlet.jsp.jstl</groupId> 55 <artifactId>javax.servlet.jsp.jstl-api</artifactId> 56 <version>1.2.1</version> 57 </dependency> 58 <dependency> 59 <groupId>javax.servlet</groupId> 60 <artifactId>javax.servlet-api</artifactId> 61 <version>3.0.1</version> 62 <scope>provided</scope> 63 </dependency> 64 <dependency> 65 <groupId>junit</groupId> 66 <artifactId>junit</artifactId> 67 <version>4.11</version> 68 <scope>test</scope> 69 </dependency> 70 </dependencies> 71</project>

投稿2021/07/25 08:26

Kawboy442

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問