标签: java-module

使用 Java 9 模块,多个模块是否能够导出相同的包?

我正在尝试使用适合 Java 9 模块系统的最佳实践,这样我就可以减少工作量来获得好处(我们的系统现在真的可以从一些模块化中受益)。

在当前标准下,模块 A 导出包 com.example.foo 和模块 B 导出包 com.example.foo 是否允许?

作为一个相关的问题,如果相关的话,是这一点是否真正得到解决,或者它是否仍然不是最终的。

java java-9 java-module

4
推荐指数
1
解决办法
1757
查看次数

以编程方式为 JarFile 提取模块名称的最佳方法是什么?

我正在为 Java 9 开发一个使用模块分层的启动器库。为了在层中添加模块,我需要将模块名称(作为字符串)传递给父级的配置。ModuleLayerJavadoc 在类文档的末尾有一个示例。

现在,我不想让我的库的用户承担声明模块名称的责任,而是允许只将 jar 文件位置作为String, URL, File, 或JarFile.

所以我的问题是,JarFile以编程方式提取模块名称的最简单方法是什么;自动的还是声明的?

java jar java-9 java-module

4
推荐指数
1
解决办法
988
查看次数

Java 9中的com.sun.javafx.collections

我需要重新编译java应用程序,在Java 8上编写.App使用com.sun.javafx.collections.ObservableListWrapper类,但在编译java 9时出现错误:

Error:(3, 22) java: package com.sun.javafx.collections is not visible
  (package com.sun.javafx.collections is declared in module javafx.base,     which does not export it to the unnamed module)
Run Code Online (Sandbox Code Playgroud)

我可以使用哪个班而不是ObservableListWrapper?或者如何绕过这个问题?

java javafx java-9 java-module javafx-9

4
推荐指数
1
解决办法
1453
查看次数

Java 9错误:不在模块源路径上的模块中

项目结构

我有一个用Java 8编写的项目,我想将它更新为Java 9.所以我把这些类分成了两个独立的模块.模块:

  • org.ggp.basemodule-info.java目录org.ggp.base/src/main/java.在我开始更新Java 9之前,它的构建是使用Gradle自动完成的.该模块使用pl.edu.prz.klopusz模块中包含的抽象类实现.
  • pl.edu.prz.klopusz在目录中pl.edu.prz.klopusz/dolar-app/src/main/java.我想使用Maven自动化它的构建.该模块需要org.ggp.base模块.

文件树看起来像:

.
??? org.ggp.base/
?   ??? build.gradle
?   ??? src/
?       ??? main/
?           ??? java/
?           ?   ??? external/
?           ?   ?   ??? JSON/
?           ?   ?       ??? JSONArray.java
?           ?   ?       ??? JSONObject.java
?           ?   ??? META-INF/
?           ?   ?   ??? MANIFEST.MF
?           ?   ??? module-info.java
?           ?   ??? org/
?           ?       ??? ggp/
?           ?           ??? base/
? …
Run Code Online (Sandbox Code Playgroud)

java compiler-errors java-9 java-module

4
推荐指数
2
解决办法
2779
查看次数

在运行时检查 --module-path 值

有什么方法可以在运行时使用-p--module-path参数获取模块路径中包含的目录列表,类似于我使用 获取所有类路径目录的方式System.getProperty("java.class.path")

java java-9 java-module module-path

4
推荐指数
1
解决办法
518
查看次数

在Java 9或10中创建FXML成员的正确性是什么?

升级到Java 10(从8开始)后,我遇到了这些错误:

InaccessibleObjectException: Unable to make field private javafx.scene.control.Button tech.flexpoint.dashman.controllers.configurator.RegistrationController.registerButton accessible: module tech.flexpoint.dashman does not "opens tech.flexpoint.dashman.controllers.configurator" to module javafx.fxml
Run Code Online (Sandbox Code Playgroud)

这是否意味着我应该将它们公之于众?这是否使得@FXML注释在Java 9和10中基本无用?

javafx fxml java-9 java-10 java-module

4
推荐指数
1
解决办法
358
查看次数

添加`module-info.java`后,Flyway无法在测试期间访问资源

升级到Java 10(从8开始)之后,我设法让一切正常,但是在添加之后module-info.java,我遇到的一个问题是,当从命令行运行测试时,Flyway无法访问SQL文件.

启动应用程序或从IntelliJ工作运行测试(但我发现在IntelliJ上运行时,许多与模块相关的问题并不明显).使用mvn spring-boot:run它启动应用程序时工作正常,但mvn package在测试任务中构建应用程序失败并出现此错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Unable to obtain input
stream for resource: db/migration/V0002__enable_uuid.sql
        at spring.beans@5.0.7.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1708) ~[spring-beans-5.0.7.RELEASE.jar:na]
        at spring.beans@5.0.7.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:581) ~[spring-beans-5.0.7.RELEASE.jar:na]
        at spring.beans@5.0.7.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:na]
        at spring.beans@5.0.7.RELEASE/org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.7.RELEASE.jar:na]
        at spring.beans@5.0.7.RELEASE/org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.7.RELEASE.jar:na]
        at spring.beans@5.0.7.RELEASE/org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.7.RELEASE.jar:na]
        at spring.beans@5.0.7.RELEASE/org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:na]
        at spring.beans@5.0.7.RELEASE/org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:304) ~[spring-beans-5.0.7.RELEASE.jar:na]
        at spring.beans@5.0.7.RELEASE/org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:na]
        at spring.context@5.0.7.RELEASE/org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1089) ~[spring-context-5.0.7.RELEASE.jar:na]
        at spring.context@5.0.7.RELEASE/org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:859) ~[spring-context-5.0.7.RELEASE.jar:na]
        at spring.context@5.0.7.RELEASE/org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.7.RELEASE.jar:na]
        at spring.boot@2.0.3.RELEASE/org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.0.3.RELEASE.jar:na] …
Run Code Online (Sandbox Code Playgroud)

java flyway java-10 java-module

4
推荐指数
1
解决办法
454
查看次数

错误:在顶级目录中找到 Main.class(模块中不允许使用未命名的包)

尝试将应用程序更新到 Java 11,在对模块进行分类之后,我以为我已经摆脱了所有的红色错误,现在我得到了一个我以前从未见过的错误:

在此处输入图片说明

环顾四周,我看到有人建议可以使用应用程序结构:

在此处输入图片说明

或 module-info.java 文件:

在此处输入图片说明

任何人都可以看到我需要做什么才能摆脱这种情况吗?

编辑:将 Main.java 移动到名为“main”的包并尝试运行它后出错:

在此处输入图片说明

java intellij-idea java-module openjfx module-info

4
推荐指数
1
解决办法
8735
查看次数

包'com.example'从'javafx.base'和'javafx.base'读取包'javafx.beans'

module-info.java我得到错误

包“ com.example”从“ javafx.base”和“ javafx.base”两者中读取包“ javafx.beans”。

迁移(从Java 8到Java 11)不仅使我感到沮丧,而且肯定会令我沮丧,这个错误对我没有任何意义。

我的依赖部分build.gradle

def springFrameworkVersion = '5.1.2.RELEASE'
def hibernateVersion = '5.3.7.Final'
def junitJupiterVersion = '5.3.1'

dependencies {
  compile 'org.transentials:cardhouse-commons:1.1.1'
  compile 'ch.qos.logback:logback-classic:1.2.3'
  compile "org.springframework:spring-context:$springFrameworkVersion"
  compile "org.springframework:spring-jdbc:$springFrameworkVersion"
  compile "org.springframework:spring-orm:$springFrameworkVersion"
  compile "org.hibernate:hibernate-core:$hibernateVersion"
  compile 'org.apache.commons:commons-dbcp2:2.5.0'
  compile 'org.apache.commons:commons-lang3:3.8.1'
  compile 'commons-io:commons-io:2.6'
  compile 'com.h2database:h2:1.4.197'
  compile 'javax.xml.bind:jaxb-api:2.3.1'
  compile 'com.google.guava:guava:27.0-jre'
  compile 'org.flywaydb:flyway-core:5.2.1'
  compile 'javax.validation:validation-api:2.0.1.Final'
  compile "org.openjfx:javafx-base:11:$platform"
  compile "org.openjfx:javafx-graphics:11:$platform"
  compile "org.openjfx:javafx-controls:11:$platform"
  compile "org.openjfx:javafx-fxml:11:$platform"
  testCompile 'junit:junit:4.12'

  testCompile 'org.mockito:mockito-core:2.+'
  testCompile 'de.saxsys:jfx-testrunner:1.2'
  testCompile 'org.apache.commons:commons-text:1.6'
  testCompile "org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion"
  testCompile "org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion"
  testCompile 'org.hamcrest:hamcrest-all:1.3'
}
Run Code Online (Sandbox Code Playgroud)

和 …

java java-platform-module-system java-module java-11 javafx-11

4
推荐指数
1
解决办法
942
查看次数

Kotlin + Java 9 模块:在模块图中找不到模块 java.base

我在构建使用 Java 9 功能的 Kotlin 项目时遇到了一些问题。我知道 kotlin 只允许生成 Java 8 字节码,但根据kotlinlang.org 的说法,它应该从 Kotlin 1.2 开始支持此功能:

Kotlin 标准库现在与 Java 9 模块系统完全兼容,该系统禁止拆分包(多个 jar 文件在同一包中声明类)。

好吧,让我解决我的问题:当我尝试执行 gradlebuild任务时遇到了这个问题:

04:29:27:正在执行任务“构建”...

任务 :compileKotlin FAILED e: 在模块图中找不到模块 java.base e: 在模块图中找不到模块 java.management

FAILURE:构建失败,出现异常。

  • 出了什么问题:任务“:compileKotlin”执行失败。

    编译错误。查看日志了解更多详情

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。

  • https://help.gradle.org获取更多帮助

BUILD FAILED in 0s 1 个可操作的任务:1 个执行编译错误。有关更多详细信息,请参阅日志 04:29:28:任务执行已完成“构建”。

我在谷歌上搜索了那个错误,发现这个主题有一个人有同样的问题,他说他通过针对大于 8 的 JDK 来修复它,但我已经使用 JDK 11 作为项目 SDK 和sourceCompatibility.

我会在这里留下 build.gradle 和项目结构的一些重要部分给你们检查。

构建.gradle

buildscript …
Run Code Online (Sandbox Code Playgroud)

java gradle kotlin java-module

4
推荐指数
2
解决办法
2880
查看次数