"requires transitive" 对于不能在 Eclipse 上运行的模块?
"requires transitive" for modules not working on Eclipse?
开始研究模块,想试试“requires transitive”。所以我为界面创建了一个模块:
module interfacesModule {
exports com.my.interfaces;
}
有 1 个接口:
package com.my.interfaces;
public interface MyInterface {
void go();
}
实现模块:
module javaModuleA {
requires interfacesModule;
exports com.my.moduleA;
}
class:
package com.my.moduleA;
import com.my.interfaces.MyInterface;
public class ClassA implements MyInterface {
public void go() {
System.out.println("in class A");
}
}
和主模块:
module mainModule {
requires transitive javaModuleA;
requires interfacesModule; // this line I want to comment, to use from requires transitive
}
class:
package com.my;
import com.my.interfaces.MyInterface;
import com.my.moduleA.ClassA;
public class Main {
public static void main(String[] args) {
System.out.println("main java module");
MyInterface a = new ClassA();
a.go();
}
}
这很好用!
现在,如果我注释行“requires interfacesModule;”在我的主模块上,它是否仍然可以工作,因为我有 javaModuleA 的“需要传递”?
当我评论它时,我得到“类型 com.my.interfaces.MyInterface 不可访问”。
mainModule
中的 requires transitive javaModuleA;
声明意味着具有 requires mainModule
声明的假设模块将自动获得依赖项,就好像也具有声明 requires javaModuleA;
一样。
换句话说,您要尝试为 mainModule
获取隐式 requires interfacesModule;
,需要更改 javaModuleA
module javaModuleA {
requires transitive interfacesModule;
exports com.my.moduleA;
}
然后,具有 requires javaModuleA;
或 requires transitive javaModuleA;
的 mainModule
可以使用 interfacesModule
的导出包而不需要 requires interfacesModule;
.
理由是您可能有一个包含接口和实现的 javaModuleA
作为起点,并决定将已经变得太大的模块重构为 javaModuleA
和 interfacesModule
,无需适配依赖模块。然后,在 javaModuleA
中包含 requires transitive interfacesModule;
允许依赖于 javaModuleA
的模块继续工作,就好像它仍然是大模块一样。
开始研究模块,想试试“requires transitive”。所以我为界面创建了一个模块:
module interfacesModule {
exports com.my.interfaces;
}
有 1 个接口:
package com.my.interfaces;
public interface MyInterface {
void go();
}
实现模块:
module javaModuleA {
requires interfacesModule;
exports com.my.moduleA;
}
class:
package com.my.moduleA;
import com.my.interfaces.MyInterface;
public class ClassA implements MyInterface {
public void go() {
System.out.println("in class A");
}
}
和主模块:
module mainModule {
requires transitive javaModuleA;
requires interfacesModule; // this line I want to comment, to use from requires transitive
}
class:
package com.my;
import com.my.interfaces.MyInterface;
import com.my.moduleA.ClassA;
public class Main {
public static void main(String[] args) {
System.out.println("main java module");
MyInterface a = new ClassA();
a.go();
}
}
这很好用!
现在,如果我注释行“requires interfacesModule;”在我的主模块上,它是否仍然可以工作,因为我有 javaModuleA 的“需要传递”?
当我评论它时,我得到“类型 com.my.interfaces.MyInterface 不可访问”。
mainModule
中的 requires transitive javaModuleA;
声明意味着具有 requires mainModule
声明的假设模块将自动获得依赖项,就好像也具有声明 requires javaModuleA;
一样。
换句话说,您要尝试为 mainModule
获取隐式 requires interfacesModule;
,需要更改 javaModuleA
module javaModuleA {
requires transitive interfacesModule;
exports com.my.moduleA;
}
然后,具有 requires javaModuleA;
或 requires transitive javaModuleA;
的 mainModule
可以使用 interfacesModule
的导出包而不需要 requires interfacesModule;
.
理由是您可能有一个包含接口和实现的 javaModuleA
作为起点,并决定将已经变得太大的模块重构为 javaModuleA
和 interfacesModule
,无需适配依赖模块。然后,在 javaModuleA
中包含 requires transitive interfacesModule;
允许依赖于 javaModuleA
的模块继续工作,就好像它仍然是大模块一样。