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

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

ただいまの
回答率

87.58%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 196

score 14

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

# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: Java CI with Maven

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 8
      uses: actions/setup-java@v2
      with:
        java-version: '8'
        distribution: 'adopt'
    - name: Build with Maven
      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のライブラリのパッケージ読み込みに問題が発生しているものと推測しております。

2021-07-24T12:09:35.1081503Z [INFO] 24 errors 
2021-07-24T12:09:35.1082509Z [INFO] -------------------------------------------------------------
2021-07-24T12:09:35.1083403Z [INFO] ------------------------------------------------------------------------
2021-07-24T12:09:35.1084179Z [INFO] BUILD FAILURE
2021-07-24T12:09:35.1084978Z [INFO] ------------------------------------------------------------------------
2021-07-24T12:09:35.1116178Z [INFO] Total time:  8.300 s
2021-07-24T12:09:35.1118245Z [INFO] Finished at: 2021-07-24T12:09:35Z
2021-07-24T12:09:35.1132705Z [INFO] ------------------------------------------------------------------------
2021-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: 
2021-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
2021-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
2021-07-24T12:09:35.1205781Z [ERROR] /home/runner/work/food_share_web/food_share_web/src/test/TestTimestampUtil.java:[29,10] cannot find symbol
2021-07-24T12:09:35.1207252Z [ERROR]   symbol:   class Test
2021-07-24T12:09:35.1208255Z [ERROR]   location: class test.TestTimestampUtil


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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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>jp.example</groupId>
    <artifactId>food_share_web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.heroku.sdk</groupId>
                <artifactId>heroku-maven-plugin</artifactId>
                <version>3.0.4</version>
                <configuration>
                    <appName>${heroku.appName}</appName>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.13.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>


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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

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>を追加することで、テストコードの実行とビルドが完了いたしました。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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>jp.example</groupId>
    <artifactId>food_share_web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <testSourceDirectory>test</testSourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.heroku.sdk</groupId>
                <artifactId>heroku-maven-plugin</artifactId>
                <version>3.0.4</version>
                <configuration>
                    <appName>${heroku.appName}</appName>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.13.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問