Я создал два небольших проекты de.app1 и de.app2, где App
из de.app1 используют Test
из де .app2.Можно ли использовать зависимости без модуля-info.class в модуле Java 9
├── de.app1
│ ├── de
│ │ └── app
│ │ └── App.java
│ └── module-info.java
└── de.app2
└── de
└── test
└── Test.java
module-info.java в первом проекте содержит только module de.app1 {}
Я скомпилировал второй проект и создал банку файл:
javac de/test/Test.java
jar cf app2.jar de/test/Test.class
, а затем попытался скомпилировать первый проект выглядит следующим образом:
javac -cp ../de.app2/app2.jar de/app/App.java module-info.java
не удалось, так как Test
не найдено. Когда я скомпилирую проект без module-info.java, все работает как обычно.
Возможно ли использовать классы из jar, который не является модулем Java 9 в пределах модуля Java 9? Особенно для проектов, которые зависят от сторонних проектов (например, apache-commons, ...), я думаю, что что-то вроде этого потребуется.
Ницца, спасибо! Итак, чтобы я понял это: когда я работаю с модулями, я должен в основном использовать путь к модулю вместо classpath? –
Это не так просто. JVM будет загружать только модули из пути модуля, которые требуются другому модулю. Зависимости автоматических модулей не требуются никому (потому что у них нет 'module-info'), поэтому они не будут загружены. Они должны идти по пути класса, где они сгруппированы в [неназванный модуль] (http://openjdk.java.net/projects/jigsaw/spec/sotms/#the-unnamed-module). – Nicolai
Если один автоматический модуль зависит от другого автоматического модуля (то есть, оба находятся на пути к модулю, но только первый требуется явным модулем ), то вы можете заставить второй автоматический модуль загружаться через ['- add-modules'] (http://openjdk.java.net/jeps/261#Root-modules) опция. Этот параметр принимает различные специальные токены, обозначающие полезные коллекции модулей. ['ALL-MODULE-PATH'] (http://openjdk.java.net/jeps/261#ALL-MODULE-PATH), в частности, загрузит все наблюдаемые модули, найденные на пути к модулю. –