2013-12-20 182 views
75

我已经安装了两个jdks - jdk 1.5和jdk 1.8。 我有以下的Ant build.xml配置文件:javac1.8类没有找到

<target name="compileCustomSrc"> 
    <javac srcdir="src" destdir="build/classes" source="1.5" target="1.5" > 
     <classpath> 
      <fileset dir="C:/lib/"> 
       <include name="*.jar" /> 
      </fileset> 
     </classpath> 
    </javac> 
</target> 

安装jdk1.8之前,蚂蚁从Eclipse中调用编译所有来源的成功。但现在,我有以下错误信息:

Class not found: javac1.8

我JAVA_HOME和JRE_HOME:

JAVA_HOME = C:\Program Files (x86)\Java\jdk1.5.0_16 
JRE_HOME = C:\Program Files (x86)\Java\jre1.5.0_16

,并在Eclipse中的JRE设置为1.5。 Java 1.8在安装过程中是否设置了一些配置?

回答

156
Class not found: javac1.8

已知此错误使用Apache Ant版本低于1.9.0发生 - 如果你正在使用Ant版本< 1.9.0不属于与Java兼容8,你应该更新1.9.x版本。

下面是相关的bug报告:https://issues.apache.org/bugzilla/show_bug.cgi?id=53347

顺便说一句,如果你只是想与Java 8编译,但不需要编译任何实际的Java语法8,那么你可以通过以下参数的javac作为解决方法,这样可以让你继续使用Ant的旧版本:

-Dbuild.compiler=javac1.7 
+8

我遇到了这个问题,并且给定的标志('-Dbuild.compiler = javac1.7')在传递直接到'ant'。 – cincodenada

+5

我找到了[code](http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/ CompilerAdapterFactory.java?r1=1037667&r2=1345316&pathrev=1345316&diff_format=f)。他们正在测试您是否使用Java 1.3或更低版本。十多年前的旧代码。因此,每当Oracle出现时,Ant就会中断有一个新的1.x版本Ant已经需要1.4或更高版本,他们应该从代码中删除这个检查 –

+3

@ David W - 为什么地狱没有他们增加了对Java 1.9和2.0的支持,所以这些改变在接下来的6到8年内都会发挥作用。 Java 9即将推出,并且所有事情都将再次破裂...... – jww

3
JAVA_HOME = C:\Program Files (x86)\Java\jdk1.5.0_16 
JRE_HOME = C:\Program Files (x86)\Java\jre1.5.0_16 

你JAVA_HOME和JRE_HOME设置为Java 1.5的安装,因此1.8的二进制文件(如javac)都没有发现。 将它们设置为Java 1.8安装,你应该没问题。

+0

但我不想使用jdk1.8。为什么Ant尝试使用1.8编译器进行此设置? – kamilz

+1

用“Run As”运行Ant构建>“Ant Build ...“,然后打开”JRE“选项卡并选择要运行该脚本的”Runtime JRE“ –

+0

”javac“任务可以为旧vms生成字节码,请参阅doco中的”target“属性:https: //ant.apache.org/manual/Tasks/javac.html Java 1.5无法为以后的虚拟机生成字节码 –

5

我有同样的问题。我正确设置了JAVA_HOME和JRE_HOME。我也有Ant> 1.9。

我修复它的方法是进入Eclipse到Window - > Preferences。展开Ant并选择运行时。默认情况下,应该选择Classpath选项卡,在右边有一个名为“Ant Home”的按钮。单击此按钮并仔细检查它是否指向您的Ant文件夹。

13

作为Kristian Holdhus的回答(标记为正确)的后续内容,您可以改为使用Ant javac task上的compiler属性。设置compiler="modern"应该是向后(早在1.3)和向前兼容。

这可以避免设置名为build.compiler的Java系统属性。只有在javac任务中没有明确设置compiler属性时,Ant会使用build.compiler的值作为回退。

+0

我当然赞成Kristian Holdus的回答。但是,我发现这是对我的情况更好的解决方案。通过强制调用者添加-D参数,我们很难将build.xml发送给外部用户。我们还需要提供额外的使用说明,它总是越小越好:) –

+0

它的工作,在建立'[javac]警告时显示注释:C:\ Program Files \ Java \ jre1.8.0_152 \ lib \ rt.jar( java/net/ConnectException.class):主要版本52比51更新,这是该编译器支持的最高版本。 [javac]建议编译器升级.' etc – aswzen

1

更新蚂蚁的1.9.x版本与Java 8不兼容使用Ant版本少塔1.9

2

我Eclise尝试,并得到没有找到相同的错误类:javac1。8

我在我的系统

>蚂蚁-version上验证的ANT版本上2015年6月29日

编译

Apache Ant的(TM)版本1.9.6当我试图从命令提示符运行build.xml时,它工作。 然后我在Eclipse中检查了它是指ANT的旧版本。

我简单地编辑了Eclipse中的ANT HOME路径,它也从这里开始工作。 :)

以下是需要在Eclipse中编辑ANT路径的图像。

  1. 的build.xml文件
  2. 运行右击为
  3. 外部工具配置
  4. 选择Classpath选项卡

现在从这里改变ANT主页路径。

enter image description here

+0

你是否将ANT Home路径更改为? –

+1

Hi @IgorGanapolsky之前的Ant版本路径是Ant 1.8的版本,我更新到最新的Ant版本1.9,如上图所示。它的工作。希望我回答你的问题。 – KulDeep

0

我尝试了所有的其他解决方案,但没有奏效。我终于找到了一种在Eclipse中为我工作的方法:

  • 右键单击ant任务名称,例如,在ant窗口中的“compileCustomSrc”。
  • 选择Run As | External Tool Configurations
  • 然后JRE选项卡上,选择Separate JRE: Java SE7或任何你的Java 7的命名,然后打Apply,然后Run

您的蚂蚁任务将被执行,并且会正确构建!

0

更新蚂蚁的1.9.x版本与Java 8不兼容使用Ant版本少塔1.9或之后的COMAND把-Dbuild.compiler = javac1.7,请参阅下面的:

蚂蚁释放-Dbuild.compiler = javac1.7

0

有时同时建设通过ANT战争的问题也涉及到Java版本小姐比赛在build.properties文件,build.xml文件试图使用build.compiler财产

检查是否建立中提到的Java版本.compiler属性与预期的Java版本相同。