Используя javah maven-antrun-plugin с jdk 1.7, classes.jar стал tools.jar
В jdk 1.7 для Mac расположение com.sun.tools.javah.Main перемещено из classes.jar в tools.jar. Следовательно, maven-antrun-plugin Maven не может найти запуск задачи javah, и выдается исключение ClassNotFound:
Caused by: java.lang.ClassNotFoundException: com.sun.tools.javah.Main
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java :50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at org.apache.tools.ant.taskdefs.optional.javah.SunJavah.compile(SunJavah.java:57)
... 47 more
1.7 Местоположение: /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/lib/tools.jar
1.6 Местоположение: /Library/Java/JavaVirtualMachines/1.6.0_32-b05-420.jdk/Contents/Classes/classes.jar
Это похоже на ошибку или сбой maven версии 3.0.4. Я подумал о том, чтобы сделать tools.jar зависимостью от плагина, но это кажется неправильным. Я попробовал эти решения, но не смог заставить их работать:
JDK tools.jar как зависимость maven
maven: Как загрузить tools.jar / classes.jar независимым от ОС способом?
Любая работа вокруг, пока maven люди не обращаются к плагину maven-antrun с jdk-1.7 на mac?
1 ответ
Ответ состоял в том, чтобы добавить tools.jar в качестве зависимости от плагина. Включить часть ниже от <dependencies> ... </dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>compile</phase>
<configuration>
<target>
<property name="runtime_classpath" refid="maven.runtime.classpath"/>
<property name="test_classpath" refid="maven.test.classpath"/>
<property name="plugin_classpath" refid="maven.plugin.classpath"/>
<echo message="runtime classpath: ${runtime_classpath}"/>
<echo message="test classpath: ${test_classpath}"/>
<echo message="plugin classpath: ${plugin_classpath}"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>