sourceencoding pom plugin mvn homepage compiler compile java maven-2 tools.jar

java - pom - JDK tools.jar como dependencia maven



mvn compile utf 8 (6)

De alguna manera, el eclipse en windows falla al recoger {java.home}. Entonces, tuve que configurar JAVA_HOME en lugar de java.home. JAVA_HOME se configuró en Ejecutar-> Configuraciones de ejecución-> Entorno. Esto funcionó para mí con JDK estándar (no 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>

Me gustaría poner JDK tools.jar como compilación de dependencia. Encontré algunos ejemplos que indican usar la propiedad systemPath de la siguiente manera:

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

El problema es que la ruta no es correcta para Mac Os X (sin embargo, es correcta para Windows y Linux). Para ello, la ruta correcta es $ {java.home} /../ Classes / classes.jar .

Estoy buscando una forma de definir una propiedad maven de modo que si el sistema se detecta como Mac OS X, el valor se establece en $ {java.home} /../ Classes / classes.jar , de lo contrario se establece en $ {java.home} /../ lib / tools.jar (como es posible hacer con ANT). ¿Alguien tiene una idea?


El comentario de Edward es correcto.

Necesita el perfil Y necesita la dependency fuera del bloque de profiles . El perfil solo determina qué valor va a obtener ${toolsjar} .

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


Gracias por presentarme los perfiles de maven.

He utilizado el perfil como se menciona arriba y activando un perfil basado en la presencia del archivo deseado:

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

Publiqué esta respuesta para resaltar un error en la publicación anterior: la sección de propiedad solo se puede usar en la sección de activación para activar un perfil en función de la existencia de la propiedad especificada. Para definir una propiedad, la sección de propiedades debe usarse como arriba.


Hola, sé que ustedes son inteligentes, pero me llevó un par de días darme cuenta de que la respuesta no está completa: tanto el perfil como la dependencia son necesarios. Espero que nadie pierda el tiempo en esto de nuevo. Por favor vea mi código completo a continuación:

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


Para eso sirven los perfiles, extraer la ruta a una propiedad, configurar los perfiles para Windows, OSX, etc., y definir los valores de propiedad de forma adecuada.

Aquí está la página del documento que analiza los perfiles de los sistemas operativos: Maven Local Settings Model

Debería parecer algo como esto:

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


mi solución:

  1. poner las herramientas de Sun.jar en $JAVA_HOME/lib
  2. hacer un enlace simbólico en $JAVA_HOME/.. named lib donde target será $JAVA_HOME/lib