home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Java/Maven3/tools.jarを使う時のトラブルシュート(<scope>=system, <systemPath>)

Java/Maven3/tools.jarを使う時のトラブルシュート(<scope>=system, <systemPath>)

Java / Maven3 / tools.jarを使う時のトラブルシュート(<scope>=system, <systemPath>)
id: 1084 所有者: msakamoto-sf    作成日: 2012-06-02 23:03:30
カテゴリ: Eclipse Java Maven 

Mavenでtools.jarを参照するときに、主に環境面でトラブルに遭遇することがあります。
そこで主なトラブルと対処法についてまとめてみました。

そもそもtools.jarを参照する方法が分からない

"<dependency>"で"<scope>"に"system"を設定します。これはローカル上のjarファイルをコンパイル時に参照させたい(でもパッケージング時には含めない)場合に使います。"<systemPath>"によりローカル上のtools.jarを指定します。

pom.xmlの"<dependency>"の例(Windows or unix):

<dependency>
   <groupId>com.sun</groupId>
   <artifactId>tools</artifactId>
   <version>1.5</version>
   <scope>system</scope>
   <systemPath>${java.home}/../lib/tools.jar</systemPath>
 </dependency>

MacOSXの場合はtools.jarがclasses.jarに含まれているので不要になるが、マルチOSに柔軟に対応させるには?

MacOSXの場合はtools.jarがclasses.jarに含まれているので不要のようです。
このようにOS毎に設定を切り替えるにはMavenの"profile"という機能を使います。
以下に2種類のバリエーションを紹介します。

  <profiles>
    <profile>
      <id>windows_profile</id>
      <activation>
        <os>
          <family>Windows</family>
        </os>
      </activation>
      <properties>
        <toolsjar>${java.home}/../lib/tools.jar</toolsjar>
      </properties>
    </profile>
    <profile>
      <id>osx_profile</id>
      <activation>
        <os>
          <family>mac</family>
        </os>
      </activation>
      <properties>
        <toolsjar>${java.home}/../Classes/classes.jar</toolsjar>
      </properties>
    </profile>
  </profiles>
    <profile>  
      <id>excluding_mac</id>  
      <activation>  
        <os>  
          <family>!mac</family>  
        </os>  
      </activation>  
      <dependencies>  
        <dependency>  
          <groupId>com.sun</groupId>  
          <artifactId>tools</artifactId>  
          <version>1.5.0</version>  
          <scope>system</scope>  
          <systemPath>${java.home}/../lib/tools.jar</systemPath>  
        </dependency>  
      </dependencies>  
    </profile>  

他、参照:

tools.jarへの依存関係が解決できない。゚(゚´Д`゚)゚。

mvn単体で発生する場合と、mvnでは問題ないのにEclipse + m2eプラグインだと発生してしまう場合があります。
結論から言うと、mvn または Eclipse のランタイム環境がJDKであることを確認してください。
前述のとおり"<systemPath>"に ${java.home} からの相対パスを指定している場合は特にこれでトラブルになる可能性が高いと思われます。

mvnのランタイム環境を確認:"mvn -version"で確認

> mvn -version
Apache Maven 3.0.4 (r1232337; 2012-01-17 17:44:56+0900)
Maven home: C:\in_vitro\apps\apache-maven-3.0.4\bin\..
Java version: 1.6.0_22, vendor: Sun Microsystems Inc.
Java home: C:\Program Files\Java\jdk1.6.0_22\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"

なおその上で、pom.xmlでjvmのバージョンや"<systemPath>"の指定を確認し、最終的に参照されるtools.jarの存在を確認してください。

Eclipseのランタイム環境を確認

まずEclipse + m2e環境でtools.jarへの参照を解決できない場合、問題やエラーログに詳細が表示されますので確認してください。
自分の場合、以下の様なログが出ていました。

Missing artifact com.sun:tools:jar:1.5.0 pom.xml
コンテナー 'Maven 依存関係' が存在しないライブラリー
'C:\Users\xxxxxx\.m2\repository\com\sun\tools\1.5.0\tools-1.5.0.jar'
を参照しています
ビルド・パスのエラーが解決されるまで、プロジェクトをビルドできません

→ "${java.home}"でなく、"$HOME/.m2/repository"を参照している時点で明らかにJavaのランタイム環境がおかしくなっています。

EclipseのランタイムJava環境は「ヘルプ」→「Eclipseについて」→「インストール詳細」→「構成」タブから"-vm"行を確認します。これがJDKになっていない場合は、eclipse.ini(Winならeclipse.exeと同じフォルダにある)に"-vm"オプションを追加します。なお"-vm"オプションは"-vmargs"の前に設定することを忘れずに。"-vmargs"以下はJVMへの引数として解釈されてしまいます。
例:

...
-vm
C:/Program Files/Java/jdk1.6.0_xx/bin/javaw.exe
-vmargs
...

参考:(最初m2eのバグの可能性も考えて色々調べたのですが、結局ランタイムがJDKになってなかったことが原因でした)



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2013-07-14 12:48:20
md5:6410f80bd33d590db1fbda20328a9971
sha1:52ef19a4258540b5bb396654687e421f0f24b57f
コメント
コメントを投稿するにはログインして下さい。