10

Git Bash (64 ビット) で Maven を数か月使用していますが、突然動作しなくなり、maven コマンドでこのエラーが発生しています。

myuser@mypc MINGW64 ~ (master *)
$ mvn -v
Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher

私はこれを含む SO に関する多くの質問を確認しました: Maven エラー: メイン クラス org.codehaus.plexus.classworlds.launcher.Launcherが見つからないかロードできませんでしたが、私の問題は解決していません。

2.12 から最新の Git for Windows (2.14.2.windows.2) にアップグレードしましたが、問題は残ります。

私の Maven インストールは C:\apache-maven-3.5.0\bin にあり、これは私の PATH 変数にあります。

myuser@mypc MINGW64 ~ (master *)
$ echo $PATH
...:/c/jdk1.7.0_79/bin:/c/apache-maven-3.5.0/bin:...

JAVA_HOME も正しく設定されています。

myuser@mypc MINGW64 ~ (master *)
$ echo $JAVA_HOME
C:\jdk1.7.0_79

MAVEN_HOME の追加/削除を試みましたが、Apache Maven スタートアップ スクリプト (C:\apache-maven-3.5.0\bin\mvn) で検出されないようです:

myuser@mypc MINGW64 ~ (master *)
$ echo $MAVEN_HOME
c:\apache-maven-3.5.0

Apache Maven Startup Script に入り、${MAVEN_HOME} のインスタンスを C:\apache-maven-3.5.0 に置き換えると、Launcher クラスが検出され、正しく実行されます。

次のように編集します。

CLASSWORLDS_JAR=`echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar`
  to
CLASSWORLDS_JAR=`echo /c/apache-maven-3.5.0/boot/plexus-classworlds-*.jar`

次に生成します:

myuser@mypc MINGW64 ~ (master *)
$ mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T15:39:06-04:00)
Maven home: C:\apache-maven-3.5.0
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: C:\jdk1.7.0_79\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

これは洗練されていない回避策であり、適切な解決策を見つける必要があります。パスをハードコーディングせずに Maven を実行できるようにするには、どのような環境または構成の変更を試みることができますか?


VonCの回答の手順/結果:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\windows\system32>set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\
C:\windows\system32>set GH=C:\Program Files\Git
C:\windows\system32>set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH%
C:\windows\system32>set PATH=%JAVA_HOME%\bin;%MAVEN_HOME%\bin;%PATH%

C:\windows\system32>echo %PATH%
C:\jdk1.7.0_79\bin;c:\apache-maven-3.5.0\bin;C:\Program Files\Git\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Git\mingw64\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\

C:\windows\system32>echo %M2_HOME%
C:\apache-maven-3.5.0

C:\windows\system32>mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T15:39:06-04:00)
Maven home: c:\apache-maven-3.5.0\bin\..
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: C:\jdk1.7.0_79\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

C:\Windows\System32>bash

myuser@mypc MINGW64 /c/Windows/System32
$ mvn -v
Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher

myuser@mypc MINGW64 /c/Windows/System32
$ echo $M2_HOME
C:\apache-maven-3.5.0

S279887@P2025774 MINGW64 /c/Windows/System32
$ echo $MAVEN_HOME
c:\apache-maven-3.5.0

さらにデバッグした後、私の問題は MINGW Git bash: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcherの Maven エラーと同じように見えることに気付きました。コードのこのセクションで MAVEN_HOME 変数がクリアされます。 :

# For MinGW, ensure paths are in Unix format before anything is touched
if $mingw ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`(cd "$JAVA_HOME"; pwd)`
  # TODO classpath?
fi

問題のある行[[ -n "$MAVEN_HOME" ]] && MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`を bash セッションで実行すると、最新の Git for Windows で動作を再現できます。

myuser@mypc MINGW64 ~ (master *)
$ git --version
git version 2.14.2.windows.3

myuser@mypc MINGW64 ~ (master *)
$ echo $MAVEN_HOME
c:\apache-maven-3.5.0

myuser@mypc MINGW64 ~ (master *)
$ [[ -n "$MAVEN_HOME" ]] && MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`

myuser@mypc MINGW64 ~ (master *)
$ echo $MAVEN_HOME


myuser@mypc MINGW64 ~ (master *) 
$

これは、コマンドを直接実行したときに得られるものです。期待どおりに MAVEN_HOME ではなく、現在のディレクトリが返されます。コマンドがサブシェルで実行されるためにそれが起こると仮定しますか?

myuser@mypc MINGW64 ~ (master *)
$ echo `(cd "$MAVEN_HOME"; pwd)`
/c/home

myuser@mypc MINGW64 ~ (master *)
$ `(cd "$MAVEN_HOME"; pwd)`
bash: /c/home: Is a directory
4

1 に答える 1