src/main/java/
- module-info.java
src/main/kotlin/
- Foo.kt
- Bar.kt
build.gradle
...
我的build.gradle
声明了以下依赖关系:
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.10"
compile "org.jetbrains.kotlin:kotlin-reflect:1.2.10"
compile "org.junit.jupiter:junit-jupiter-api:5.0.2"
}
我在我的Kotlin源代码中使用了所有这些依赖项(foo.kt
、bar.kt
,...)。
如果我像这样编写模块-info.java
,那么一切工作都很顺利:
module my.module {
requires kotlin.stdlib;
exports my.module.pkg;
}
/path/to/my.module/src/main/java/module-info.java:26: warning: requires directive for an automatic module
requires kotlin.stdlib;
^
e: /path/to/my.module/src/main/java/module-info.java: The Kotlin standard library is not found in the module graph. Please ensure you have the 'requires kotlin.stdlib' clause in your module definition
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':my.module:compileKotlin'.
现在,我也可以通过编辑compilekotlin
任务来解决这个问题:
compileKotlin {
doFirst {
kotlinOptions.freeCompilerArgs = ['-Xallow-kotlin-package']
}
}
但这只会在compilekotlin
任务期间导致更多错误,所有错误都如下所示:
e: /path/to/my.module/src/main/kotlin/Foo.kt: (27, 30): Symbol is declared in module 'org.junit.jupiter.api' which current module does not depend on
然后,如果我试图通过将“-xmodule-path=${classpath.aspath}”
添加到freecompilerargs
并将classpath
设置为空来强制compilekotlin
接受模块路径而不是类路径,那么Kotlin编译器根本找不到任何东西,最终会出现无数未解决的引用错误!
为什么Kotlin编译器告诉我,我必须有要求Kotlin.stdlib;
,而Java编译器却说相反呢?我如何让Kotlin和Java一起工作来生成Java9模块?
如果您正在用Kotlin编写Java9模块,您必须在模块-info.Java
中声明需要Kotlin.stdlib
,以便满足编译后的Kotlin代码的运行时依赖关系以及对标准库API的显式依赖关系。
javac
警告您在启用lint时需要自动模块,因为与普通模块相比,自动模块有一些潜在的缺点。在标准库编译为普通模块之前,您必须处理此警告。
-xallow-kotlin-package
编译器标志允许您省略require kotlin.stdlib
,因为它只用于编译标准库本身。显然,如果您指定了这个标志并省略了这个要求,那么您将无法使用标准库中的任何API,因此这不是一个真正适合您的选项。
食氧;视窗7;JDK 9决赛从9日开始,21日结束;JUnit4.12和现有的应用程序。作为起点,可以编译、执行应用程序,并且所有JUnit测试都显示为绿色。现在我们使用eclipse生成文件模块信息。JAVA结果是: 但有一个错误:junit无法解析为模块。问题是:如何告诉文件junit没有定义任何模块,应该在兼容模式下运行?
我想在java模块中使用CDI功能。我希望我的代码保持泛型,不依赖于特定的实现。 我使用Java11和Maven3.6.0。 为了简单起见,我的目标被简化为在java文件中导入包。当我在没有module(没有)的情况下这样做时,每件事都能正常工作。 我的理解是,CDI库应该采用一个受jar文件名称启发的自动模块名称。当我使用指令运行maven时,我在类路径中看到。我相信,如果我错了,请更正,这应该
主要内容:模块系统特征,创建模块Java 9是一种称为模块的新型编程组件。模块是一个自我描述的代码和数据集合,并有一个名称来标识它。 模块系统特征 使用模块组件,Java 9中增加了以下增强功能 - 引入了一个新的可选阶段,即链接时间。这个阶段介于编译时间和运行时间之间。 在此阶段,可以组合和优化一组模块,使用jlink工具制作自定义运行时映像。 javac,jlink和java有额外的选项来指定模块路径,它们进一步定位模块的定
我的项目依赖于Netty Epoll Transport。以下是依赖关系: 无法派生模块描述符:netty-transport-native-epoll-4.1.17。final-snapshot-linux-x 86_64.jar netty.transport.native.epoll:无效的模块名:'native'不是Java标识符 有什么变通办法吗?(当然,除了“释放正确的netty神器”
那么,换句话说,为什么编译器不能在第二个方法中执行自动装箱呢?是因为在第二个方法中,绑定不是显式的,而在第一个方法中绑定是明确的。
2. 隐含规则和模式规则 上一节的Makefile写得中规中矩,比较繁琐,是为了讲清楚基本概念,其实Makefile有很多灵活的写法,可以写得更简洁,同时减少出错的可能。本节我们来看看这样一个例子还有哪些改进的余地。 一个目标依赖的所有条件不一定非得写在一条规则中,也可以拆开写,例如: main.o: main.h stack.h maze.h main.o: main.c gcc -c ma