Is it possible to use dependencies without module-info.class in a Java 9 module

余生长醉 提交于 2019-12-21 07:40:11

问题


I created two small projects de.app1 and de.app2, where App from de.app1 uses Test from de.app2.

├── de.app1
│   ├── de
│   │   └── app
│   │       └── App.java
│   └── module-info.java
└── de.app2
    └── de
        └── test
            └── Test.java

module-info.java in the first project just contains module de.app1 {}

I compiled the second project and created a jar file:

javac de/test/Test.java
jar cf app2.jar de/test/Test.class

and then tried to compile the first project like this:

javac -cp ../de.app2/app2.jar de/app/App.java module-info.java

which failed because Test could not be found. When I compile the project without module-info.java, everything is working as usual.

Is it somehow possible to use classes from a jar that is not a Java 9 module within a Java 9 module? Especially for projects that depend on 3rd-party projects (e.g. apache-commons,...), I think something like this would be required.


回答1:


Yes, it is possible. What you are looking for are automatic modules.

To create one you simply put a regular JAR into a folder that you mention on the module path (e.g. guava-19.0.jar in a folder libs - see my example project). This tells the JVM to create a module from it. This module will get a name based on the file name (in this case guava), will read all other modules, and export all of its packages.

You can then require it with the name it was given (e.g. require guava; - see here).



来源:https://stackoverflow.com/questions/38269630/is-it-possible-to-use-dependencies-without-module-info-class-in-a-java-9-module

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!