我是靠谱客的博主 会撒娇牛排,最近开发中收集的这篇文章主要介绍自动模块 未命名模块 java,Java 9迁移问题-包com.mymodule在未命名的模块中声明,模块'newmodule'不读取它...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

I have created a multimodule project with the following structure

myproject

|- mymodule

|- src

|- main

|- java

|- com

|- mymodule

|- Util.java

|-newmodule

|-src

|-main

|-java

|-com

|-newmodule

|- Main.java

|-module-info.java

Now i want to use Util.java which is a non modularized code in a modularized module newmodule.

i have declared following in newmodule

module newmodule {

requires mymodule;

}

Project is compiling fine, but Intellij is showing module not found and package com.mymodule is declared in unnamed module , module 'newmodule' does not read it.

How to resolve this issue?

And one more question does all the old non modular code is by default turn into automatic-module in java 9 if i don't even modularized legacy modules?

解决方案

One clear way to resolve this is to make the mymodule as an explicit module as well. This would just be the ideal world of modules I would say.

You can do that by including a module-info.java in mymodule as well, something like -

module mymodule {

exports com.mymodule;

}

does all the old non modular code is by default turn into

automatic-module in java 9 if i don't even modularized legacy modules?

The concept of both the unnamed module and automatic module is to aid the migration and provide the compatibility with the existing classpath techniques.

On one hand, the dependencies of your module which are still not themselves modular and you would still rely on them being one, can be used on the module path for the module system to implicitly define them, when treated as automatic modules and bridge the bottom-up migration expected by JPMS.

The unnamed modules on the other hand relies on the type that is not defined in any module and is resolved to be still found on the classpath. This ensures that every type resolved is part of some module(if nothing then the unnamed module) and also provides the compatibility such that code of existing applications relying on the classpath shall compile and run similarly on module system as well.

The reason, why you would fail to declare an explicit dependence in your code is stated clearly in the doc:-

The unnamed module exports all of its packages. This enables flexible

migration, as we shall see below. It does not, however, mean that code

in a named module can access types in the unnamed module. A named

module cannot, in fact, even declare a dependence upon the unnamed

module. This restriction is intentional, since allowing named modules

to depend upon the arbitrary content of the class path would make

reliable configuration impossible.

最后

以上就是会撒娇牛排为你收集整理的自动模块 未命名模块 java,Java 9迁移问题-包com.mymodule在未命名的模块中声明,模块'newmodule'不读取它...的全部内容,希望文章能够帮你解决自动模块 未命名模块 java,Java 9迁移问题-包com.mymodule在未命名的模块中声明,模块'newmodule'不读取它...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部