Les énoncés suivants semblent fonctionner fâcheusement:La classe réside dans un répertoire différent de celui spécifié par le paquet - comment ça se fait?
[email protected]:~/tmp> cat org/foo/Bar.java
public class Bar {
}
[email protected]:~/tmp> javac org/foo/Bar.java
[email protected]:~/tmp> javap org.foo.Bar
Compiled from "Bar.java"
public class org.something.Bar extends java.lang.Object{
public org.something.Bar();
}
Bien que le fichier de classe de bar est dans le répertoire org/foo
et déclare le paquet org.something
, le compilateur ne se plaint pas. J'étais sous l'impression que java a mandaté une hiérarchie de répertoire qui suit le nom du paquet. Est-ce que je me suis trompé? Si oui, quelles sont les conséquences du mélange des noms de paquets?
Bonne réponse, merci pour la recherche aussi bien. Il semble qu'aucune implémentation ne l'exige cependant - mon exemple est fait avec les 'javac' et' javap' d'Oracle. –
Par "requires", je voulais dire que ces outils sont ce qui génère l'organisation des paquets et l'exigent à _runtime_. (Les programmes javac/javap ne l'exigent pas des fichiers source.) Le point clé étant les spécifications de langage (et de JVM) ne nécessitent pas d'organisation de sous-répertoire, mais toutes les implémentations d'outils Java standard. – kaliatech
Ils en ont également besoin au moment de la compilation pour compiler les classes dépendantes. Si vous avez compilé une autre classe qui dépendait de Bar et Bar n'a pas été compilée, la compilation échouerait si Bar.java n'était pas au bon endroit. – EJP