关键词:
最近在使用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
- <project default="prod" basedir=".">
- ...
- <property environment="env" />
- <property name="java.jre.lib.dir" value="$env.JAVA_HOME/jre/lib" />
- <!-- classpath used for javac -->
- <path id="classpath">
- <fileset dir="lib" includes="*.jar"/>
- <fileset dir="$java.jre.lib.dir">
- <include name="*.jar" />
- </fileset>
- </path>
- ...
- <target name="compile" depends="init">
- <javac
- srcdir="src"
- destdir="$staging/bin"
- encoding="UTF-8"
- source="1.6"
- target="1.6"
- nowarn="on"
- debug="on"
- optimize="on"
- includeantruntime="false">
- <classpath refid="classpath" />
- </javac>
- </target>
- </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
- <javac
- srcdir="src"
- destdir="$staging/bin"
- encoding="UTF-8"
- source="1.6"
- target="1.6"
- nowarn="on"
- debug="on"
- optimize="on"
- includeantruntime="false">
- <compilerarg value="-XDignore.symbol.file"/>
- <classpath refid="classpath" />
- </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系统的... 查看详情