【问题标题】:Bootstrap a simple Java SE "Hello World" desktop application using JBoss Weld environment causes a runtime error使用 JBoss Weld 环境引导一个简单的 Java SE“Hello World”桌面应用程序会导致运行时错误
【发布时间】:2020-03-22 13:35:45
【问题描述】:

我想在一个 Maven 结构化项目的经典 Hello World 应用程序中使用 JBoss Weld 作为 CDI 工具。为了使事情尽可能干净和简单,我只创建了一个Weld 环境对象,仅此而已。我还在 src/main/resources/META-INF 中创建了部署描述符文件 beans.xmlsrc/test/resources 目录。我没有进一步创建和初始化WeldContainer 等。我只是想知道为什么这些设置一开始就不起作用。

应用程序完美编译并使用 mvn package 命令生成可执行 jar 文件。但是我遇到了运行时错误:

C:\dev\eclipse-workspace\my-app>java -cp target/my-app-1.0.jar app.Hello
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/weld/environment/se/Weld
        at app.Hello.main(Hello.java:7)
Caused by: java.lang.ClassNotFoundException: org.jboss.weld.environment.se.Weld
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.j
ava:602)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoader
s.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        ... 1 more

所以,这是我的主要课程:

 1 package app;
 2
 3 import org.jboss.weld.environment.se.Weld;
 4
 5 public class Hello {
 6     public static void main(String[] args) {
 7         Weld weld = new Weld();
 8          
 9         System.out.println("Hello World");
10        
11         weld.shutdown();
12         System.exit(0);
13     }
14 }

我的 pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
            https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>jee</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>
  <name>my-app</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>13</maven.compiler.source>
    <maven.compiler.target>13</maven.compiler.target>
  </properties>

  <dependencies>

    <dependency>
      <groupId>org.jboss.weld.se</groupId>
      <artifactId>weld-se-core</artifactId>
      <version>3.1.3.Final</version>
    </dependency>

  </dependencies>

</project>

最后是我的项目结构:

提前感谢您的帮助。

谢谢。

亚历克斯

【问题讨论】:

  • 您是否尝试在搜索引擎中发布错误?
  • 谷歌如何构建一个“jar-with-dependencies”,这样做,再试一次。

标签: java cdi bootstrapping weld


【解决方案1】:

您会注意到 java -cp target/my-app-1.0.jar app.Hello 不包括类路径中的 Weld jar(除非您的 jar 文件的 META-INF/MANIFEST.MF 具有引用它们的 Class-Path 条目)。这就是为什么当您以这种方式启动应用程序时在运行时找不到 Weld 类的原因。

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    相关资源
    最近更新 更多