当前位置: 首页 > 知识库问答 >
问题:

在jdk 1.7中使用javah maven-antrun-plugin,classes.jar变成了tools.jar

柯天宇
2023-03-14

在针对Mac的JDK1.7中,com.sun.tools.javah.main的位置从classes.jar移到了tools.jar。因此,Maven的maven-antrun-plugin找不到run the 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

这似乎是maven 3.0.4版的一个bug或失败。我曾考虑过让tools.jar成为一个插件依赖项,但这似乎不太对。我尝试了这些解决方案,但我无法让它们奏效:

JDK tools.jar作为maven依赖项

Maven:如何以独立于操作系统的方式加载tools.jar/classes.jar?

共有1个答案

越福
2023-03-14

答案是添加tools.jar作为插件的依赖项。包含 ... 中的以下部分

 <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>
 类似资料:
  • 问题内容: 我的maven java项目使用maven-antrun-plugin执行部署我的应用程序的deploy.xml ant脚本。deploy.xml使用该任务,这似乎是导致问题的原因。 [INFO]执行任务 [taskdef]无法从资源net / sf / antcontrib / antlib.xml加载定义。找不到。 部署: [INFO] ----------------------

  • 在build/brexand-bundles中找到的实际classes.jar文件不是空的。 我尝试清理项目。我想这将导致所有的依赖被删除并重新下载。然而,在此之后,Android Studio仍然无法在StickyListHeaders的classes.jar中找到任何类。 到目前为止,这个问题只对Se.EmilsJolander的库存在。奇怪的是,这个post1的回答者发布了一张截图,显示他确

  • 在程序中, 给出错误- 在其他线程之后,我将JDK遵从性级别更改为1.7,还添加了 java.home=/home/user/jdk1.7.0_79/JRE java.library.path=/home/user/jdk1.7.0_79/jre/lib/i386/server:/home/user/jdk1.7.0_79/jre/lib/i386:/home/user/jdk1.7.0_79/j

  • 我正在尝试生成一个启用了minifytrue的库,但是在版本中。啊,上课。罐子快空了。 我已经检查了我的程序规则。而且看起来还不错。 我甚至用默认设置创建了一个新模块。gradle文件,当我将minifyEnable设置为true时,发布版本仍然会获得类。里面没有类的jar。 毕竟,有可能生成一个混淆代码的android库吗? 编辑1:添加模块生成。格拉德尔

  • 我需要取回一个在未来的onSuccess块中被改变的变量。这是我的示例代码。 返回为无,不会变为,或。那么这是否意味着onSuccess块中变量的值无法返回?然而,这似乎奏效了: 我可以在未来的onSuccess块中做什么,以便根据未来的结果是整数还是字符串,将< code>ret的值返回为< code>1或< code>2?在这种情况下,scala的作用域规则是什么?(我用的是akka)。感谢任

  • 问题内容: ,正如上面问题中回答的那样,我现在有一个maven-antrun-plugin,它可以分叉一个子进程并使用类似的配置来运行我的java appserver- 上面的配置作为后台进程顺利启动了我的appserver。 现在,我的问题是,有没有一种简便的方法可以定位此过程并在构建完成后根据需要停止该过程。 问题答案: 您可以使用JDK中捆绑的实用程序来获取正在运行的Java可执行文件的进程