ant自动编译javaproject时无法找到rt.jar的处理方法

要千 要千     2022-11-28     437

关键词:

最近在使用Ant自动化编译打包一个Java项目,执行时总是报有class找不到:

    [javac] Compiling 46 source files to /A/B/C/D/build/staging/bin
    [javac] .../ChangePassWordTool.java:5: 
package com.sun.org.apache.xml.internal.security.utils does not exist
    [javac] import com.sun.org.apache.xml.internal.security.utils.Base64;
    [javac]                                                      ^
    [javac] .../ChangePassWordTool.java:39: cannot find symbol
    [javac] symbol  : variable Base64
    [javac] location: class com.xxx.ChangePassWordTool
    [javac]             passWord = Base64.encode(passWord.getBytes()); 
    [javac]                        ^
    [javac] 2 errors

由于在eclipse中使用ant插件编译打包该项目没有问题,纳闷为啥出现该异常。

首先定位该类:com.sun.org.apache.xml.internal.security.utils.Base64,发现是在jre/rt.jar中,因此第一步怀疑是ant的配置文件有问题,将build.xml中的文件调整如下:

[html]  view plain  copy  
  1. <project default="prod" basedir=".">  
  2.           
  3.     ...  
  4.     <property environment="env" />  
  5.     <property name="java.jre.lib.dir" value="$env.JAVA_HOME/jre/lib" />  
  6.       
  7.     <!-- classpath used for javac -->  
  8.     <path id="classpath">  
  9.         <fileset dir="lib" includes="*.jar"/>           
  10.         <fileset dir="$java.jre.lib.dir">  
  11.             <include name="*.jar" />  
  12.         </fileset>      
  13.     </path>  
  14.       
  15.     ...  
  16.     <target name="compile" depends="init">  
  17.         <javac  
  18.             srcdir="src"  
  19.             destdir="$staging/bin"  
  20.             encoding="UTF-8"  
  21.             source="1.6"  
  22.             target="1.6"  
  23.             nowarn="on"  
  24.             debug="on"  
  25.             optimize="on"  
  26.             includeantruntime="false">                         
  27.             <classpath refid="classpath" />                 
  28.         </javac>  
  29.     </target>  
  30.   
  31. </project>  

但是调整之后,编译打包还是报上述错误, 后查询 资料 发现, 是由于javac编译代码的行为所致。

javac在编译代码时,当他尝试从rt.jar中找寻对应的类文件时,他会默认从对应的符号表文件ct.sym (同样在jre/lib/下)中查找该类是否存在,由于ct.sym中有意或无意的遗失了部分rt.jar中的类,包括我使用的com.sun.org.apache.xml.internal.security.utils.Base64,因此导致编译报错。


解决方法就是通知javac编译器,在编译代码时,忽略该符号表ct.sym, 直接查找rt.jar,通过给javac传入对应的参数完成:-XDignore.symbol.file

在配置文件中即为:

[html]  view plain  copy  
  1. <javac  
  2.     srcdir="src"  
  3.     destdir="$staging/bin"  
  4.     encoding="UTF-8"  
  5.     source="1.6"  
  6.     target="1.6"  
  7.     nowarn="on"  
  8.     debug="on"  
  9.     optimize="on"  
  10.     includeantruntime="false">  
  11.                 <compilerarg value="-XDignore.symbol.file"/>            
  12.     <classpath refid="classpath" />                 
  13. </javac>  


编译成功

在 NetBeans 中编译 Maven 项目时 Ant 无法找到环境变量

】在NetBeans中编译Maven项目时Ant无法找到环境变量【英文标题】:AntnotabletofindenvironmentvariableswhencompilingMavenprojectinNetBeans【发布时间】:2012-03-0617:41:17【问题描述】:我正在尝试在Ubuntu机器上编译一个开源应用程序“OSCARMcMASTER”... 查看详情

jmeter导入eclipse,如何编译

...译即可,操作步骤如下:一、将jmeter搬到Eclipse中1)新建javaproject;2)使用import ,选择filesystem,将上面编译成功的jmeter的项目的文件导进去eclipse的开发环境。3)关掉Eclipse,将jmeter自带的eclipse.classpathcopy到javaproject的.classpath文... 查看详情

运行ant时“无法找到tools.jar” [重复]

】运行ant时“无法找到tools.jar”[重复]【英文标题】:"Unabletolocatetools.jar"whenrunningant[duplicate]【发布时间】:2012-02-2512:42:31【问题描述】:运行ant时,我收到以下消息:Unabletolocatetools.jar.ExpectedtofinditinC:\\ProgramFiles\\Java\\jre6... 查看详情

带有 maven-antrun-plugin 的 Maven Ant BuildException ...无法找到 javac 编译器

】带有maven-antrun-plugin的MavenAntBuildException...无法找到javac编译器【英文标题】:MavenAntBuildExceptionwithmaven-antrun-plugin...unabletofindjavaccompiler【发布时间】:2011-06-0609:52:49【问题描述】:我正在尝试让Maven为一些遗留代码调用ANT构建。an... 查看详情

无法找到 tools.jar [重复]

...复:Unabletolocatetools.jar我正在尝试使用ant使用此命令进行编译:antcompile我不知道问题是来自我的Windows64位还是其他原因。因为我在64&32prog文件中安装了java。我下载了apache-ant- 查看详情

尝试比较现有javaproject的ant构建到maven或gradle的迁移吗?

我们有一个包含许多进程/应用程序的复杂Java项目。计划从Ant构建迁移到Maven或Gradle。尝试将迁移过程与maven和gradle进行比较。有什么想法和建议吗?谢谢,答案Gradle是您的选择。将来如果你想将你的应用程序迁移到android,那么... 查看详情

使用 Ant 编译的 Android 项目无法编译,非法字符错误

】使用Ant编译的Android项目无法编译,非法字符错误【英文标题】:AndroidProjectCompiledwithAntdoesn\'tcompile,IllegalCharacterError【发布时间】:2011-11-0405:52:13【问题描述】:我正在使用ANT编译我构建的Android应用程序。这听起来很奇怪,可... 查看详情

ant重新编译打包hadoop-core-1.2.1.jar时遇到的错

错误1.[[email protected]hadoop]#ant-Dversion=1.2.1examples错误:找不到或无法加载主类org.apache.tools.ant.launch.Launcher解决方案exportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/usr/share/ant/lib/ant-launcher.jar 查看详情

myeclipseformac怎么配置maven

...中央仓库里,如jar,tld,pom,等。当编译的时候,maven会自动在仓库中找到相应的包,如果本地仓库没有,则从设定好的远程仓库中下载到本地。这一切都是自动的,而ant需要自己定义了。这个好处导致的结果就是,用maven编译... 查看详情

codeblocks无法找到编译器问题的三个原因

...ndirectory(上面的那个框)中所填目录路径的bin子目录下。(自动选取)点击Auto-detect自动选取。如果失败的话,(手动选取)可浏览选取该路径,查看是否有bin子目录且子目录内是否有相应的编译器。若无法找到,可能编译器安装... 查看详情

Ant + Vista 64:“无法找到 tools.jar”(jre/jdk 冲突?)

】Ant+Vista64:“无法找到tools.jar”(jre/jdk冲突?)【英文标题】:Ant+Vista64:"Unabletolocatetools.jar"(jre/jdkconflict?)【发布时间】:2011-05-2116:22:16【问题描述】:我正在尝试在vista64环境中使用ant来构建一些docbook/xml文件。但是,... 查看详情

编译“ant”构建时出错

】编译“ant”构建时出错【英文标题】:Errorwhilecompiling"ant"build【发布时间】:2016-03-0615:38:21【问题描述】:最近我在我的科尔多瓦应用程序中安装了cordova-plugin-local-notifications插件。运行antdebuginstall命令时出现以下错误... 查看详情

Bamboo:错误:无法找到或加载主类 org.apache.tools.ant.launch.Launcher

】Bamboo:错误:无法找到或加载主类org.apache.tools.ant.launch.Launcher【英文标题】:Bamboo:Error:Couldnotfindorloadmainclassorg.apache.tools.ant.launch.Launcher【发布时间】:2017-01-1216:16:03【问题描述】:我正忙着让Ant从Bamboo中逃跑。我的Ant安装目... 查看详情

Gradle 在使用 Proguard 编译发布版本时无法找到一些引用和库类

】Gradle在使用Proguard编译发布版本时无法找到一些引用和库类【英文标题】:GradleunabletofindsomereferencedandlibraryclasseswhileusingProguardtocompilereleasebuild【发布时间】:2016-11-2102:09:13【问题描述】:我正在尝试使用proguard构建我的应用程... 查看详情

Matlab 2017a 无法识别编译器(使用 mex 时出错,未找到支持的编译器或 SDK)

】Matlab2017a无法识别编译器(使用mex时出错,未找到支持的编译器或SDK)【英文标题】:Matlab2017anotrecognizingcompiler(ErrorusingmexNosupportedcompilerorSDKwasfound)【发布时间】:2018-05-2423:48:36【问题描述】:我正在尝试从fileexchange编译一些.c... 查看详情

React 无法编译模块未找到:无法在listingDetail 上解析

】React无法编译模块未找到:无法在listingDetail上解析【英文标题】:ReactfailedtocompileModulenotfound:Can\'tresolveonlistingDetail【发布时间】:2021-03-0823:41:25【问题描述】:我在反应时遇到错误,说编译失败和./src/App.js我注意到在路线上的... 查看详情

无法在 MFP v7 中使用适配器生成器任务 (ANT) 编译 Java 适配器

】无法在MFPv7中使用适配器生成器任务(ANT)编译Java适配器【英文标题】:CannotcompileJavaadapterusingadapter-buildertask(ANT)inMFPv7【发布时间】:2015-06-1101:44:31【问题描述】:几周来,我们一直在使用适配器构建器任务(com.worklight.ant.builders.... 查看详情

jenkins+ant+jmeter自动化环境搭建

          写在最前面:jmeter:测试接口的工具,支持java语言;ant:ApacheAnt是一个Java库和命令行工具,其任务是将构建文件中描述的进程作为相互依赖的目标和扩展点。只要使用过Linux系统的... 查看详情