Je crois à l'aide des --classpath
et --module-path
options en même temps est pas illégal. Il est possible d'utiliser les deux en même temps, même si vous ne spécifiez pas explicitement un chemin de classe, affiche par défaut dans le répertoire en cours.
Détails dans le message javac -help
et javac tools docs -
--module-path <path>, -p <path>
Indiquez où trouver des modules d'application
--class-path <path>, -classpath <path>, -cp <path>
Indiquez où trouver les fichiers de classes d'utilisateurs et processeurs d'annotation
Si --class-path
, -classpath
ou -cp
ne sont pas spécifiés, puis l'utilisateur le chemin de classe est le répertoire actuel.
Modifier: Merci à @MouseEvent, je serais probablement manqué la partie dans la question
Cependant, si ne les font pas de modules automatiques et simplement spécifier le --class-path un.jar juste à côté de --module-path, alors javac semble ignorer le claspath et lance "package yyy not found" et d'autres erreurs "not found".
Si vous ne les faites pas automatique, il est traité comme un Module System's unnamed module et -
Un module nommé ne peut pas, en fait, même déclarer une dépendance sur le le module sans nom. Cette restriction est intentionnelle, puisque permettre aux modules nommés de dépendre du contenu arbitraire du chemin de classe rendrait une configuration fiable impossible.
De plus, les exportations du module sans nom tous ses paquets d'où le code dans un modules automatiques seront en mesure d'accéder à tout type du public chargé de la classpath.
Mais un module automatique qui utilise des types du chemin de classe ne doit pas exposer ces types aux modules explicites qui en dépendent, puisque les modules explicites ne peuvent pas déclarer de dépendances sur le module sans nom.
Si le code dans le module explicite com.foo.app
fait référence à un type publique dans com.foo.bar
, par exemple, et la signature de ce type fait référence à un type dans l'un des fichiers JAR encore sur le chemin de la classe, puis le code dans com.foo.app
ne pourra pas accéder à ce type puisque com.foo.app
ne peut pas dépendre du module sans nom.
Cela peut être résolu en traitant com.foo.app
comme un module automatique temporaire de sorte que son code peut accéder à des types de chemin de classe, jusqu'à ce que le fichier JAR concerné sur le chemin de la classe peut être considérée comme un module automatique ou converti en un module explicite.
Il est possible de mélanger les deux, pouvez-vous partager un exemple minimal que nous pouvons vérifier? –
* Je peux comprendre que l'utilisation de --class-path et --module-path au même moment (compilation) est illégale, * pourquoi est-ce le cas? – nullpointer
Le mélange est absolument légal.Cependant, les fichiers JAR modulaires ne peuvent pas référencer les fichiers JAR non modulaires sur le chemin de classe. Les modules automatiques (jar non modulaires sur le chemin du module) agissent comme un pont: les jars modulaires _can_ les référencent, et les modules automatiques peuvent lire le classpath. –