java: jakarta.inject.Provider.get() 在无法访问的 class 或接口中定义
java: jakarta.inject.Provider.get() is defined in an inaccessible class or interface
我正在尝试在我的 Java (SE) FX 应用程序中使用 dependency injection,但在使用以下代码时出现错误 java: jakarta.inject.Provider.get() is defined in an inaccessible class or interface
。
@Log4j2
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Weld weld = new Weld();
try (WeldContainer container = weld.initialize()) {
container.select(MainWindowLoader.class).get().loadMainWindow(primaryStage);
}
}
}
MainWindowLoader class 如下所示。
public class MainWindowLoader {
public void loadMainWindow(Stage primaryStage) throws Exception {
Parent parent = FXMLLoader.load(getClass().getResource("/MainWindow.fxml"));
Scene scene = new Scene(parent);
final ObservableList<String> stylesheets = scene.getStylesheets();
stylesheets.addAll(getClass().getResource("/css/style.css").toExternalForm());
primaryStage.setTitle("Avengers Manager");
primaryStage.setScene(scene);
primaryStage.show();
}
}
我正在使用以下依赖项。
<!-- weld for dependency injection -->
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se-core</artifactId>
<version>4.0.1.SP1</version>
</dependency>
我唯一的 module-info.java
个文件如下所示。
module avengers-manager {
requires weld.se.core;
requires weld.environment.common;
requires weld.core.impl;
requires jakarta.inject;
opens us.tony.stark.avengers-manager;
}
有什么想法吗?
解决这个问题的方法是使用阴影依赖项。
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se-shaded</artifactId>
<version>4.0.1.SP1</version>
</dependency>
我正在尝试在我的 Java (SE) FX 应用程序中使用 dependency injection,但在使用以下代码时出现错误 java: jakarta.inject.Provider.get() is defined in an inaccessible class or interface
。
@Log4j2
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Weld weld = new Weld();
try (WeldContainer container = weld.initialize()) {
container.select(MainWindowLoader.class).get().loadMainWindow(primaryStage);
}
}
}
MainWindowLoader class 如下所示。
public class MainWindowLoader {
public void loadMainWindow(Stage primaryStage) throws Exception {
Parent parent = FXMLLoader.load(getClass().getResource("/MainWindow.fxml"));
Scene scene = new Scene(parent);
final ObservableList<String> stylesheets = scene.getStylesheets();
stylesheets.addAll(getClass().getResource("/css/style.css").toExternalForm());
primaryStage.setTitle("Avengers Manager");
primaryStage.setScene(scene);
primaryStage.show();
}
}
我正在使用以下依赖项。
<!-- weld for dependency injection -->
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se-core</artifactId>
<version>4.0.1.SP1</version>
</dependency>
我唯一的 module-info.java
个文件如下所示。
module avengers-manager {
requires weld.se.core;
requires weld.environment.common;
requires weld.core.impl;
requires jakarta.inject;
opens us.tony.stark.avengers-manager;
}
有什么想法吗?
解决这个问题的方法是使用阴影依赖项。
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se-shaded</artifactId>
<version>4.0.1.SP1</version>
</dependency>