webentwicklung-frage-antwort-db.com.de

JDK tools.jar als Maven-Abhängigkeit

Ich möchte JDK tools.jar als Abhängigkeit beim Kompilieren verwenden. Ich habe einige Beispiele gefunden, die die Verwendung der systemPath -Eigenschaft wie folgt anzeigen:

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

Das Problem ist, dass der Pfad für Mac Os X nicht korrekt ist (jedoch für Windows und Linux). Der richtige Pfad lautet dafür $ {Java.home} /../ Classes/classes.jar .

Ich suche nach einer Möglichkeit, eine Maven-Eigenschaft so zu definieren, dass der Wert auf " $ {Java.home} /../ Classes/classes.jar " gesetzt wird, wenn das System als Mac Os X erkannt wird wird auf $ {Java.home} /../ lib/tools.jar gesetzt (wie es mit ANT möglich ist). Hat jemand eine Idee?

72
Laurent

Vielen Dank, dass Sie mir Mavenprofile vorgestellt haben.

Ich habe Profil wie oben erwähnt verwendet und aktiviere ein Profil basierend auf dem Vorhandensein der gewünschten Datei:

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

Ich habe diese Antwort gepostet, um einen Fehler im vorherigen Beitrag hervorzuheben: Der Eigenschaftsabschnitt kann nur im Aktivierungsabschnitt verwendet werden, um ein Profil basierend auf dem Vorhandensein der angegebenen Eigenschaft zu aktivieren. Um eine Eigenschaft zu definieren, muss der Eigenschaftsabschnitt wie oben verwendet werden.

39
Laurent

Dafür sind Profile gedacht, extrahieren Sie den Pfad zu einer Eigenschaft, richten Sie Profile für Windows, OSX usw. ein und definieren Sie die Eigenschaftswerte entsprechend. 

Hier ist die Doc-Seite, die Profile für Betriebssysteme behandelt: Maven Local Settings Model

Es sollte am Ende so aussehen:

  <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

Hallo, ich weiß, ihr seid alle klug, aber ich habe einige Tage gebraucht, um herauszufinden, dass die Antwort nicht vollständig ist. Ich hoffe, niemand wird wieder Zeit dafür verschwenden. Bitte sehen Sie meinen vollständigen Code unten:

<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

Irgendwie schlägt der Eclipse in Windows {Java.home} fehl. Also musste ich Java_HOME anstelle von Java.home setzen. Java_HOME wurde in Run-> Run Configurations-> Environment eingestellt. Dies funktionierte für mich mit Standard-JDK (nicht 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

Der Kommentar von Edward ist korrekt.

Sie benötigen das Profil UND Sie benötigen die Variable dependency außerhalb des Blocks profiles. Das Profil bestimmt nur, welchen Wert ${toolsjar} erhalten soll.

<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

Ich habe eine Lösung in F gefunden: Maven-Abhängigkeit von tools.jar für die Arbeit mit JDK 9 deklarieren

Da die eigentliche Maven-Zauberei ziemlich ausgereift ist, für Neuankömmlinge überraschend und ein Thema zukünftiger Verbesserungen ist, ist es besser, sie nicht mitkopieren zu lassen. Daher gibt es dieses Modul, damit Sie die Details nicht kennen oder beachten müssen. ~~ 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>
1
user7610

Richtige Anweisungen für Anfänger 

Fügen Sie dieses Profil der Pom.xml-Datei über dem Tag oder an einer anderen Stelle hinzu. 

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

dann Korrigieren Sie den JRE-Pfad 

Gehe zu : 

Windows> Einstellungen> Installierte JREs

wählen Sie die integrierte JRE aus, und doppelklicken Sie darauf, oder klicken Sie im rechten Menü auf Bearbeiten. Stellen Sie dann sicher, dass sich der JRE-Home-Pfad in JDK befindet. 

C:\Programme\Java\jdk1.8.0_181\jre

wenn Sie JRE separat installiert haben, hätte Eclipse Standalone-JRE wie folgt ausgewählt:

C:\Programme\Java\jre1.8.0_181 \

Ändern Sie es daher in JRE, das mit JDK geliefert wird: 

C:\Programme\Java\jdk1.8.0_181\jre

0
user889030