2016-09-27 3 views
0

Je suis aux prises avec le problème de la tâche javac ant depuis très longtemps maintenant. Le problème est avec qui, apparemment, fourmi ignore l'attribut cible qui est fixé à 1,5:Ant essayer de compiler à 1.6 lorsque la cible est fixée à 1.5

<target name="compile" description="Kompilacja zrodel" depends="init"> 
    <javac target="${compile.targetvm}" source="${compile.sourcecompatibility}" debug="${compile.debug}" optimize="${compile.optimize}" verbose="${compile.verbose}" srcdir="${source.dir}" destdir="${build.classes.dir}" encoding="${compile.source.encoding}" includeantruntime="false"> 
     <classpath refid="compile.classpath" /> 
    </javac> 
</target> 

La cible et la source est réglée sur 1,5. Quand je lance la tâche que j'ai erreur de compilation:

foo.Bar is not abstract and does not override abstract method createStruct(java.lang.String,java.lang.Object[]) in java.sql.Connection 

Selon la méthode docs java (link) CREATESTRUCT a été introduit en Java 1.6, donc je sais que fourmi compile à 1,6 et non 1,5 comme je l'ai poli lui demande faire.

J'ai exécuté la tâche depuis eclipse et depuis la ligne de commande avec le même résultat, donc ce n'est pas un problème d'éclipse. J'essayais de changer le JRE dans ANT et d'utiliser différentes versions ANT et rien n'a aidé.

J'ai essayé tout ce que je pouvais trouver sur le web et maintenant j'abandonne. Quelqu'un pourrait-il m'aider? Pretty please ..

+0

La spécification de la compatibilité de la source contrôle uniquement la syntaxe du langage, et non la Java Runtime Library. Puisque vous n'avez pas dit à Ant où trouver une bibliothèque d'exécution Java 1.5, elle utilise la même bibliothèque que celle utilisée pour invoquer Ant. – Andreas

+0

Pour corriger, spécifiez 'bootclasspathref =" compile.bootclasspath "', après avoir spécifié '' – Andreas

+0

Oui! Ça marche! Merci beaucoup :) Vous devriez mettre cela comme réponse pour que je puisse l'accepter –

Répondre

0

La spécification de la compatibilité de la source contrôle uniquement la syntaxe du langage, et non la bibliothèque d'exécution Java.

Puisque vous n'avez pas indiqué à Ant où trouver une bibliothèque d'exécution Java 1.5, elle utilise la même bibliothèque que celle utilisée pour invoquer Ant.

Pour corriger, spécifiez également l'attribut bootclasspathref="compile.bootclasspath".

compile.bootclasspath est défini comme suit:

<path id="compile.bootclasspath"> 
    <fileset dir="${java15.home}/jre/lib" includes="*.jar"/> 
</path> 

Il devrait être évident que java15.home est. ;-)