44 votes

Ant ne trouve pas javac, JAVA_HOME n'est pas défini sur Ubuntu

J'ai un projet Android appelé Hello sur mon serveur Ubuntu 10.04 i386 (headless). Il contient tout ce qu'un dossier de projet Android devrait avoir. Je construis d'abord le projet en bash dans le dossier du projet en utilisant ce synaxe :

./android create project --target 5 --name HelloCompile --path ../../Projects/Hello --activity HelloActivity --package com.code.Hello

puis j'essaie de construire le .apk avec ant comme ceci :

ant debug

Je reçois cette erreur :

BUILD FAILED
/home/myusername/www/sdk/tools/ant/main_rules.xml:384: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/usr/lib/jvm/java-6-openjdk/jre"

ce qui est très déroutant pour moi car juste avant de lancer ant debug Je cours :

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

qui, je le sais, fonctionne parce que printenv dans le shell bash renvoie :

JAVA_HOME=/usr/lib/jvm/java-6-openjdk

pour aggraver cela, ajouter cette ligne à mon fichier /etc/environnement

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

ne résout pas non plus le problème - j'obtiens la même erreur. Rien de ce que je fais ne change le fait qu'Ubunut pense encore que /usr/lib/jvm/java-6-openjdk/jre est le JAVA_HOME. Qu'est-ce qui ne va pas ? J'ai passé trop d'heures sur ce sujet.

77voto

Brian Roach Points 43787

Avez-vous installé le JDK ?

Lorsque vous installez Ubuntu, seul le JRE est installé dans le cadre des paquets par défaut. Malheureusement, la gestion des paquets d'Ubuntu nomme le répertoire comme si le JRE était installé avec le JDK. Le répertoire est nommé java-6-openjdk même si le JDK n'est pas présent.

Faites ce qui suit :

sudo apt-get install openjdk-6-jdk

Il installera le JDK dans ce même répertoire.

10voto

Edwin Buck Points 33097

--- Mis à jour après avoir remarqué un petit élément dans votre sortie ---

Vous avez votre JAVA_HOME à l'emplacement correct pour un Environnement d'exécution Java qui, sans surprise, vous permettra d'exécuter des programmes Java, mais pas les développer .

Raccourcissez votre JAVA_HOME a /usr/lib/jvm/java-6-openjdk (notez la suppression de la terminaison jre ). Après cela, vos wrappers Ant / le code de détection du compilateur ne seront pas confus, car ils pointeront vers le home de votre fichier Environnement de développement Java au lieu de l'intégré, de l'apparenté Environnement d'exécution Java .

L'embarqué Environnement d'exécution Java est fourni pour s'assurer que vous pouvez tester uniquement les offres Java de base (outils de compilation non inclus).

--- Le message original suit ---

Trouver la commande javac n'a pas grand-chose à voir avec JAVA_HOME au-delà de ça javac se trouve généralement dans un sous-répertoire sous le nom de JAVA_HOME

Ce que vous devez faire, c'est modifier votre PATH pour inclure le répertoire où se trouvent les exécutables Java. En général, cela se fait de la manière suivante

PATH=${PATH}:${JAVA_HOME}/bin
export PATH

mais cela peut être fait de manière légèrement différente selon votre configuration. Si vous faites

ls ${JAVA_HOME}/bin

et que vous voyez un exécutable javac, alors la modification ci-dessus de la variable path fonctionnera sans qu'il soit nécessaire de la changer.

2voto

garec Points 151

Comme Edwin Buck l'a indiqué, vérifiez dans votre $PATH la présence de liens mous vers /etc/alternatives/java dans le répertoire /usr/bin/. Ils sont lus avant votre variable JAVA_HOME ajoutée.

C'était mon problème :

ls -al /usr/bin/j* 
lrwxrwxrwx 1 root root    22 2012-05-07 13:26 /usr/bin/java -> /etc/alternatives/java
lrwxrwxrwx 1 root root    25 2011-05-12 19:45 /usr/bin/java_vm -> /etc/alternatives/java_vm
lrwxrwxrwx 1 root root    24 2011-05-01 05:22 /usr/bin/javaws -> /etc/alternatives/javaws
lrwxrwxrwx 1 root root    26 2011-05-12 19:45 /usr/bin/jcontrol -> /etc/alternatives/jcontrol
lrwxrwxrwx 1 root root    23 2011-04-26 02:24 /usr/bin/jexec -> /etc/alternatives/jexec

1voto

brandoncurtis Points 13

La modification de JAVA_HOME et PATH est insuffisante.

Après avoir installé la version de Java JDK que vous souhaitez (Java DEVELOPMENT Kit, pas seulement Java Runtime Environment JRE), modifiez votre version préférée avec sudo update-alternatives --config java . Si vous êtes sous Ubuntu, vous avez probablement installé les versions 1.6 et 1.7, et la version 1.8 est disponible dans les PPAs (bien que je n'arrive pas à trouver un PPA de la version 1.8 qui ne soit pas vieux).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X