使用 gluon Charm 模块化项目时出错:包 com.gluonhq.charm.down.plugins 可从多个模块访问
Error modularizing a project with gluon Charm: The package com.gluonhq.charm.down.plugins is accessible from more than one module
我正在对自己的项目进行模块化。我的 类 之一使用以下导入:
import com.gluonhq.charm.down.Services;
import com.gluonhq.charm.down.plugins.StorageService; // error here on "com.gluonhq.charm.down.plugins"
import com.gluonhq.charm.glisten.application.MobileApplication;
import com.gluonhq.charm.glisten.control.AppBar;
import com.gluonhq.charm.glisten.control.Dialog;
import com.gluonhq.charm.glisten.control.SettingsPane;
import com.gluonhq.charm.glisten.control.settings.DefaultOption;
import com.gluonhq.charm.glisten.control.settings.Option;
import com.gluonhq.charm.glisten.mvc.View;
import com.gluonhq.charm.glisten.visual.MaterialDesignIcon;
在我的 module-info.java
中,我声明:
requires charm.glisten;
requires charm.down.core;
requires charm.down.plugin.storage;
根据 Eclipse 的自动修复建议。但是,我收到为以上行指定的错误:
The package com.gluonhq.charm.down.plugins is accessible from more than one module:
charm.down.plugin.device,
charm.down.plugin.display,
charm.down.plugin.in.app.billing,
charm.down.plugin.lifecycle,
charm.down.plugin.push.notifications,
charm.down.plugin.runtime.args,
charm.down.plugin.statusbar,
charm.down.plugin.storage
charm
模块是自动命名的,因为它们显然不是 Java 模块。这可能与问题有关。在模块化我的项目之前,没有这样的问题。我该如何解决?
build.gradle
:
buildscript {
repositories {
jcenter()
google()
mavenCentral()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
}
maven {
url 'https://plugins.gradle.org/m2/'
}
}
dependencies {
classpath 'com.gluonhq:client-gradle-plugin:0.1.30'
}
}
plugins {
id 'org.openjfx.javafxplugin' version '0.0.9'
id 'org.beryx.jlink' version '2.21.2'
id 'com.google.osdetector' version '1.6.2'
id 'eclipse'
id 'org.kordamp.gradle.jdeps' version '0.11.0'
}
apply plugin: 'com.gluonhq.client-gradle-plugin'
repositories {
jcenter()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
}
}
sourceCompatibility = 14
targetCompatibility = 14
ext.platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os
dependencies {
compile "org.openjfx:javafx-base:14:$platform"
compile "org.openjfx:javafx-graphics:14:$platform"
compile "org.openjfx:javafx-controls:14:$platform"
compile "org.openjfx:javafx-fxml:14:$platform"
runtimeOnly "org.openjfx:javafx-graphics:14:win"
runtimeOnly "org.openjfx:javafx-graphics:14:mac"
runtimeOnly "org.openjfx:javafx-graphics:14:linux"
compile 'com.gluonhq:charm:5.0.0-jdk9'
compile 'org.reactfx:reactfx:2.0-M5'
compileOnly "org.projectlombok:lombok:1.18.12"
annotationProcessor 'org.projectlombok:lombok:1.18.12'
}
javafx {
version = "14"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
mainClassName = 'com.my.app.MainClass'
jar {
manifest {
attributes 'Main-Class': 'com.my.app.Launcher'
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
eclipse {
classpath {
downloadJavadoc = true
downloadSources = true
}
}
wrapper {
gradleVersion = '6.5.1'
}
JDK14
日蚀 4.16
buid.gradle
声明依赖'com.gluonhq:charm:5.0.0-jdk9'
(我看到版本6存在,我应该升级吗?)
用于使用 Java 1.8 或 Java 9 创建移动应用程序的旧 Gluon jfxmobile
插件已停产。
为了能够 运行 那些 Java/JavaFX 11+ 的移动应用程序,您必须将该插件替换为新的 Gluon Client 插件。
更多详情:
一个主要区别是,新插件使用 Maven 而不是 Gradle。但是,多亏了社区,还有一个版本 Client plugin for Gradle,可能会落后于 maven 对应版本)。
为了将您的项目迁移到 Java 11+ 并将一个插件替换为另一个插件,您必须修改构建文件。
plugins {
// new client plugin
id 'com.gluonhq.client-gradle-plugin' version '0.1.30'
id 'org.openjfx.javafxplugin' version '0.0.9'
id 'org.beryx.jlink' version '2.21.2'
id 'com.google.osdetector' version '1.6.2'
id 'eclipse'
id 'org.kordamp.gradle.jdeps' version '0.11.0'
}
repositories {
jcenter()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
}
}
sourceCompatibility = 14
targetCompatibility = 14
dependencies {
compile 'com.gluonhq:charm:6.0.5'
compile 'org.reactfx:reactfx:2.0-M5'
compileOnly "org.projectlombok:lombok:1.18.12"
annotationProcessor 'org.projectlombok:lombok:1.18.12'
}
javafx {
version = "14"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
gluonClient {
// target = "ios" // uncomment to deploy on iOS
// target = "android" // uncomment to deploy on Android
attachConfig {
version = "4.0.8"
services 'display', 'lifecycle', 'statusbar', 'storage'
}
}
您会注意到主要变化:
- Charm (Gluon Mobile) 现在是 6.0+
- Charm Down 已重命名为 Attach,当前版本为 4.0.8(您必须重构包名称,例如
com.gluonhq.charm.down.plugins.StorageService
至 com.gluonhq.attach.storage.StorageService
)。
您仍然可以 运行 使用 JDK 和 ./gradlew run
的项目(使用 JavaFX 插件)。
使用新的客户端插件,您还可以创建原生图像,该图像将 运行 在桌面设备(Windows、Linux、MacOS)和移动设备(Android, iOS), 利用 GraalVM。
在Client requirements, download GraalVM for your host machine from here之后,设置GRAALVM_HOME
,您将能够运行:
// build the native image, it takes some time:
./gradlew clean nativeBuild
// run the native image
./gradlew nativeRun
如果您手头有移动设备,只有在您的构建中启用 target
到 iOS 或 Android 才能构建本机映像并将其部署到该移动平台.
我正在对自己的项目进行模块化。我的 类 之一使用以下导入:
import com.gluonhq.charm.down.Services;
import com.gluonhq.charm.down.plugins.StorageService; // error here on "com.gluonhq.charm.down.plugins"
import com.gluonhq.charm.glisten.application.MobileApplication;
import com.gluonhq.charm.glisten.control.AppBar;
import com.gluonhq.charm.glisten.control.Dialog;
import com.gluonhq.charm.glisten.control.SettingsPane;
import com.gluonhq.charm.glisten.control.settings.DefaultOption;
import com.gluonhq.charm.glisten.control.settings.Option;
import com.gluonhq.charm.glisten.mvc.View;
import com.gluonhq.charm.glisten.visual.MaterialDesignIcon;
在我的 module-info.java
中,我声明:
requires charm.glisten;
requires charm.down.core;
requires charm.down.plugin.storage;
根据 Eclipse 的自动修复建议。但是,我收到为以上行指定的错误:
The package com.gluonhq.charm.down.plugins is accessible from more than one module:
charm.down.plugin.device,
charm.down.plugin.display,
charm.down.plugin.in.app.billing,
charm.down.plugin.lifecycle,
charm.down.plugin.push.notifications,
charm.down.plugin.runtime.args,
charm.down.plugin.statusbar,
charm.down.plugin.storage
charm
模块是自动命名的,因为它们显然不是 Java 模块。这可能与问题有关。在模块化我的项目之前,没有这样的问题。我该如何解决?
build.gradle
:
buildscript {
repositories {
jcenter()
google()
mavenCentral()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
}
maven {
url 'https://plugins.gradle.org/m2/'
}
}
dependencies {
classpath 'com.gluonhq:client-gradle-plugin:0.1.30'
}
}
plugins {
id 'org.openjfx.javafxplugin' version '0.0.9'
id 'org.beryx.jlink' version '2.21.2'
id 'com.google.osdetector' version '1.6.2'
id 'eclipse'
id 'org.kordamp.gradle.jdeps' version '0.11.0'
}
apply plugin: 'com.gluonhq.client-gradle-plugin'
repositories {
jcenter()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
}
}
sourceCompatibility = 14
targetCompatibility = 14
ext.platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os
dependencies {
compile "org.openjfx:javafx-base:14:$platform"
compile "org.openjfx:javafx-graphics:14:$platform"
compile "org.openjfx:javafx-controls:14:$platform"
compile "org.openjfx:javafx-fxml:14:$platform"
runtimeOnly "org.openjfx:javafx-graphics:14:win"
runtimeOnly "org.openjfx:javafx-graphics:14:mac"
runtimeOnly "org.openjfx:javafx-graphics:14:linux"
compile 'com.gluonhq:charm:5.0.0-jdk9'
compile 'org.reactfx:reactfx:2.0-M5'
compileOnly "org.projectlombok:lombok:1.18.12"
annotationProcessor 'org.projectlombok:lombok:1.18.12'
}
javafx {
version = "14"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
mainClassName = 'com.my.app.MainClass'
jar {
manifest {
attributes 'Main-Class': 'com.my.app.Launcher'
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
eclipse {
classpath {
downloadJavadoc = true
downloadSources = true
}
}
wrapper {
gradleVersion = '6.5.1'
}
JDK14
日蚀 4.16
buid.gradle
声明依赖'com.gluonhq:charm:5.0.0-jdk9'
(我看到版本6存在,我应该升级吗?)
用于使用 Java 1.8 或 Java 9 创建移动应用程序的旧 Gluon jfxmobile
插件已停产。
为了能够 运行 那些 Java/JavaFX 11+ 的移动应用程序,您必须将该插件替换为新的 Gluon Client 插件。
更多详情:
一个主要区别是,新插件使用 Maven 而不是 Gradle。但是,多亏了社区,还有一个版本 Client plugin for Gradle,可能会落后于 maven 对应版本)。
为了将您的项目迁移到 Java 11+ 并将一个插件替换为另一个插件,您必须修改构建文件。
plugins {
// new client plugin
id 'com.gluonhq.client-gradle-plugin' version '0.1.30'
id 'org.openjfx.javafxplugin' version '0.0.9'
id 'org.beryx.jlink' version '2.21.2'
id 'com.google.osdetector' version '1.6.2'
id 'eclipse'
id 'org.kordamp.gradle.jdeps' version '0.11.0'
}
repositories {
jcenter()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
}
}
sourceCompatibility = 14
targetCompatibility = 14
dependencies {
compile 'com.gluonhq:charm:6.0.5'
compile 'org.reactfx:reactfx:2.0-M5'
compileOnly "org.projectlombok:lombok:1.18.12"
annotationProcessor 'org.projectlombok:lombok:1.18.12'
}
javafx {
version = "14"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
gluonClient {
// target = "ios" // uncomment to deploy on iOS
// target = "android" // uncomment to deploy on Android
attachConfig {
version = "4.0.8"
services 'display', 'lifecycle', 'statusbar', 'storage'
}
}
您会注意到主要变化:
- Charm (Gluon Mobile) 现在是 6.0+
- Charm Down 已重命名为 Attach,当前版本为 4.0.8(您必须重构包名称,例如
com.gluonhq.charm.down.plugins.StorageService
至com.gluonhq.attach.storage.StorageService
)。
您仍然可以 运行 使用 JDK 和 ./gradlew run
的项目(使用 JavaFX 插件)。
使用新的客户端插件,您还可以创建原生图像,该图像将 运行 在桌面设备(Windows、Linux、MacOS)和移动设备(Android, iOS), 利用 GraalVM。
在Client requirements, download GraalVM for your host machine from here之后,设置GRAALVM_HOME
,您将能够运行:
// build the native image, it takes some time:
./gradlew clean nativeBuild
// run the native image
./gradlew nativeRun
如果您手头有移动设备,只有在您的构建中启用 target
到 iOS 或 Android 才能构建本机映像并将其部署到该移动平台.