Ich möchte JDK tools.jar als Kompilierungsabhängigkeit verwenden. Ich habe einige Beispiele gefunden, die darauf hinweisen, die systemPath- Eigenschaft wie folgt zu verwenden:
<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, wenn das System als Mac Os X erkannt wird, der Wert auf $ {java.home} /../ Classes / classes.jar gesetzt wird , andernfalls auf $ {java.home} /../ lib / tools.jar (wie es mit ANT möglich ist). Hat jemand eine Idee?
Antworten:
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 Dokumentseite, auf der Profile für Betriebssysteme erläutert werden: Maven Local Settings Model
Es sollte ungefähr 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>
quelle
Classes/classes.jar
) als auch Oracle Java 7 (lib/tools.jar
) unterstützen müssen, funktioniert dies nicht, die Antwort von @ Laurent jedoch.Vielen Dank, dass Sie mir Maven-Profile vorgestellt haben.
Ich habe das Profil wie oben erwähnt verwendet und ein Profil basierend auf dem Vorhandensein der gewünschten Datei aktiviert:
<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 Eigenschaftenabschnitt wie oben verwendet werden.
quelle
Hallo, ich weiß, ihr seid alle schlau, aber es hat mich ein paar Tage lang veranlasst herauszufinden, dass die Antwort nicht vollständig ist - sowohl das Profil als auch die Abhängigkeit sind notwendig. Ich hoffe, niemand wird wieder Zeit damit verschwenden. Bitte beachten 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>
quelle
dependencies
Abschnitt innerhalb des Profils ist nicht erforderlich. Es reicht aus, dies einmal außerhalb des Profils deklarieren zu lassen und dann die Profile den richtigen Wert für dietoolsjar
Eigenschaft bestimmen zu lassen .<toolsjar>${java.home}/../Classes/classes.jar</toolsjar>
lieber sein<toolsjar>${java.home}/../lib/tools.jar</toolsjar>
?Irgendwie kann die Sonnenfinsternis in Windows {java.home} nicht erfassen. Also musste ich JAVA_HOME anstelle von java.home setzen. JAVA_HOME wurde unter Run-> Run Configurations-> Environment festgelegt. Dies funktionierte bei mir 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>
quelle
Ich habe eine Lösung in F gefunden: Deklarieren Sie die Maven-Abhängigkeit von tools.jar, um mit JDK 9 zu arbeiten
<dependency> <groupId>com.github.olivergondza</groupId> <artifactId>maven-jdk-tools-wrapper</artifactId> <version>0.1</version> </dependency>
quelle
Der Kommentar von Edward ist richtig.
Sie benötigen das Profil UND Sie benötigen die
dependency
Außenseite desprofiles
Blocks. Das Profil bestimmt nur, welcher Wert${toolsjar}
erhalten wird.<dependencies> <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>jdk1.8.0</version> <scope>system</scope> <systemPath>${toolsjar}</systemPath> </dependency> </dependencies>
quelle
Richtige Anleitung für Anfänger
Fügen Sie dieses Profil zuerst zur Pom.xml-Datei über dem Tag oder an einer anderen Stelle darin 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 JRE-Pfad korrigieren
Gehe zu :
Wählen Sie die installierte JRE aus und doppelklicken Sie darauf oder klicken Sie im rechten Menü auf Bearbeiten. Stellen Sie dann sicher, dass sich der JRE-Startpfad in JDK befindet.
Wenn Sie JRE separat installiert haben, hätte Eclipse eine eigenständige JRE ausgewählt, wie:
Ändern Sie es in JRE, das mit JDK geliefert wird:
quelle
meine Lösung:
$JAVA_HOME/lib
$JAVA_HOME/..
benannten Bibliothek, in der sich das Ziel befindet$JAVA_HOME/lib
quelle