1. ホーム
  2. Maven

Jenkinsで、mavenを使用してパッケージxxxが存在しない問題が解決される

2022-02-22 12:41:11
<パス

1 問題の発見

今日、Jenkinsを使って古いプロジェクトをパッケージ化しようとしたら、次のようなエラーが出てコンパイルできませんでした。

...
[ERROR] /var/lib/jenkins/workspace/fsti-pipe/src/main/java/com/fsti/oss/service/sys/PagerService.java:[6,52] package org. springframework.beans.factory.annotation does not exist
...


ログを見ると、直接的な原因はspring用のjarパッケージが存在しないことです!?

2 原因を見つける

ローカルの開発環境で、Jenkinsと同じmaven環境をideaのmavenで構築(新しいローカルリポジトリを有効にし、同じバージョンのmaven-compiler-pluginを使用)したところ、正常にコンパイルされました!!!。つまり、何か別の原因があるのでしょう。

Jenkinsで、該当プロジェクトの[Configure]リンクを開き、[Build]タブをクリックして、Goals for Mavenに以下を追加します。 -e -X パラメータを Goals に設定し、保存します。

これにより、Mavenはビルド時に、より詳細なログを出力することができます。

ここで、プロジェクトを再度再構築し、出力ログをもう一度見てみましょう。

設定されたリポジトリが使用されたということは、リポジトリの構成に問題がないことを意味します。

[DEBUG] Using mirror nexus (http://xxx:8383/nexus/content/groups/public/) for snapshots (http://xxx:8081/nexus/content/repositories/ snapshots).
...
[DEBUG] Repositories (dependencies): [nexus-all (http://xxx:8081/nexus/content/groups/public, default, releases+snapshots), nexus (http:// xxx:8383/nexus/content/groups/public/, default, releases+snapshots)]
...


jdk パッケージで参照される依存パッケージのパスには誤りがあり、実際には /xxx/D:\Program Files\apache-maven\repo... これは明らかにLinuxの正しいパスではありません。

[DEBUG] -d /var/lib/jenkins/workspace/fsti-pipe/target/classes -classpath /var/lib/jenkins/workspace/fsti-pipe/target/classes:/var/lib /jenkins/workspace/fsti-pipe/D:\Program Files\apache-maven\repo/com/fsti/agile/fsti-agile/1.1.1/fsti-agile-1.1.1.jar:
...


この時点で、mavenのsetting.xmlのlocalRepositoryの設定パスが正しくなく、上記の問題を引き起こしていることが確認できます。ざっと見たところ、このような感じです。

3 問題の解決

mavenのsetting.xmlのlocalRepositoryを正しい設定パスに変更しましょう! このパスは、Linuxで読み取り/書き込みのパーミッションが必要であることを忘れないでください O(∩_∩)O~.