web-dev-qa-db-ja.com

Maven依存関係としてのJDK tools.jar

JDK tools.jarをコンパイルの依存関係として配置したいと思います。次のようなsystemPathプロパティを使用することを示すいくつかの例を見つけました。

<dependency>
  <groupId>com.Sun</groupId>
  <artifactId>tools</artifactId>
  <scope>system</scope>
  <systemPath>${Java.home}/../lib/tools.jar</systemPath>
</dependency>

問題は、Mac Os Xのパスが正しくないことです(ただし、WindowsおよびLinuxの場合は正しいです)。そのための正しいパスは$ {Java.home} /../ Classes/classes.jarです。

システムがMac OS Xとして検出された場合、値が$ {Java.home} /../ Classes/classes.jarに設定されるように、Mavenプロパティを定義する方法を探しています。 、それ以外の場合は$ {Java.home} /../ lib/tools.jarにに設定されます(ANTでできるように)。誰かがアイデアを持っていますか?

73
Laurent

Mavenプロファイルをご紹介いただきありがとうございます。

上記のプロファイルを使用し、目的のファイルの存在に基づいてプロファイルをアクティブにします:

<profiles>
    <profile>
        <id>default-profile</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <file>
                <exists>${Java.home}/../lib/tools.jar</exists>
            </file>
        </activation>
        <properties>
            <toolsjar>${Java.home}/../lib/tools.jar</toolsjar>
        </properties>
    </profile>
    <profile>
        <id>mac-profile</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <file>
                <exists>${Java.home}/../Classes/classes.jar</exists>
            </file>
        </activation>
        <properties>
            <toolsjar>${Java.home}/../Classes/classes.jar</toolsjar>
        </properties>
    </profile>
</profiles>

前の投稿の間違いを強調するために、この回答を投稿しました。プロパティセクションは、指定されたプロパティの存在に基づいてプロファイルをアクティブにするために、アクティブ化セクションでのみ使用できます。プロパティを定義するには、上記のようにプロパティセクションを使用する必要があります。

39
Laurent

それがプロファイルの目的であり、プロパティへのパスを抽出し、ウィンドウ、OSXなどのプロファイルを設定し、プロパティ値を適切に定義します。

OSのプロファイルについて説明しているドキュメントページは次のとおりです。 Maven Local Settings Model

最終的には次のようになります。

  <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>
45
sblundy

こんにちは、皆さんは賢いのですが、答えが完全ではないことを理解するのに数日かかりました-プロファイルと依存関係の両方が必要です。誰も再びこれに時間を無駄にしないことを願っています。以下の完全なコードをご覧ください:

<profiles>
    <profile>
        <id>osx_profile</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <os>
                <family>mac</family>
            </os>
        </activation>
        <properties>
            <toolsjar>${Java.home}/../Classes/classes.jar</toolsjar>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.Sun</groupId>
                <artifactId>tools</artifactId>
                <version>1.6.0</version>
                <scope>system</scope>
                <systemPath>${toolsjar}</systemPath>
            </dependency>
        </dependencies>
    </profile>
</profiles>
9
Jianyu

どういうわけか、WindowsのEclipseは{Java.home}を取得できません。そのため、Java.homeの代わりにJava_HOMEを設定する必要がありました。 Java_HOMEは、Run-> Run Configurations-> Environmentで設定されました。これは標準のJDKでうまくいきました(not Apple JDK)。

<profiles>
        <profile>
            <id>windows-profile</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <file>
                    <exists>${Java_HOME}/lib/tools.jar</exists>
                </file>
            </activation>
            <properties>
                <toolsjar>${Java_HOME}/lib/tools.jar</toolsjar>
            </properties>
        </profile>
        <profile>
            <id>mac-profile</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <file>
                    <exists>${Java.home}/../lib/tools.jar</exists>
                </file>
            </activation>
            <properties>
                <toolsjar>${Java.home}/../lib/tools.jar</toolsjar>
            </properties>
        </profile>
    </profiles>


    <dependencies>
        <dependency>
                <groupId>jdk.tools</groupId>
                <artifactId>jdk.tools</artifactId>
                <version>jdk1.8.0</version>
                <scope>system</scope>
                <systemPath>${toolsjar}</systemPath>
            </dependency>
        </dependencies>
7
Animesh Sharma

Qで解決策を見つけました: JDK 9で動作するようにtools.jarのmaven依存関係を宣言します

実際のMavenウィザードは非常に手の込んだものであり、新規参入者と驚くべき将来の改良の対象であるため、コピーペーストしないでください。したがって、このモジュールが存在するため、詳細を知ったり、気にする必要はありません。 ~~ https://github.com/olivergondza/maven-jdk-tools-wrapper

<dependency>
  <groupId>com.github.olivergondza</groupId>
  <artifactId>maven-jdk-tools-wrapper</artifactId>
  <version>0.1</version>
</dependency>
4
user7610

Edward のコメントは正しいです。

プロファイルが必要であり、dependencyブロックの外側にprofilesが必要です。プロファイルは、どの値${toolsjar}取得します。

<dependencies>
    <dependency>
        <groupId>jdk.tools</groupId>
        <artifactId>jdk.tools</artifactId>
        <version>jdk1.8.0</version>
        <scope>system</scope>
        <systemPath>${toolsjar}</systemPath>
    </dependency>
</dependencies>
1
Marty

初心者向けの適切な指示

まず、このプロファイルをタグの上のPom.xmlファイルまたはその中のどこかに追加します。

<profiles>
    <profile>
        <id>default-profile</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <file>
                <exists>${Java.home}/../lib/tools.jar</exists>
            </file>
        </activation>
        <properties>
            <toolsjar>${Java.home}/../lib/tools.jar</toolsjar>
        </properties>
    </profile>
    <profile>
        <id>mac-profile</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <file>
                <exists>${Java.home}/../Classes/classes.jar</exists>
            </file>
        </activation>
        <properties>
            <toolsjar>${Java.home}/../Classes/classes.jar</toolsjar>
        </properties>
    </profile>
</profiles>

その後、正しいJREパス

後藤

Windows> Preferecnes>インストールされたJRE

intalled JREを選択してダブルクリックするか、右メニューから[編集]をクリックして、JREホームパスがJDK内にあることを確認します。

C:\ Program Files\Java\jdk1.8.0_181\jre

jREを個別にインストールした場合、Eclipseは次のようなスタンドアロンJREを選択します。

C:\ Program Files\Java\jre1.8.0_181 \

jDKに付属のJREに変更します。

C:\ Program Files\Java\jdk1.8.0_181\jre

0
user889030