You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Weld SE JavaSE应用JNI运行时错误求助:ClassNotFoundException

解决Weld SE应用运行时NoClassDefFoundError问题

你遇到的核心问题是运行时找不到Weld SE相关类,这是因为你用maven-jar-plugin生成的jar只包含了自己项目的代码,没有把依赖的Weld库打包进去,导致JVM在运行时无法定位ContainerInitialized这类类。下面给你几个可行的解决方案:

方案一:使用maven-assembly-plugin打包胖jar

这个插件可以把所有依赖的jar包内容合并到一个可执行jar里,步骤如下:

  1. 在pom.xml的<build><plugins>中添加assembly插件配置:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>de.mycompany.weldapp.App</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  1. 重新执行打包命令:
mvn clean package
  1. 运行生成的胖jar(文件名会是weldapp-0.0.1-SNAPSHOT-jar-with-dependencies.jar):
java -jar target/weldapp-0.0.1-SNAPSHOT-jar-with-dependencies.jar World

方案二:使用maven-shade-plugin打包(更灵活)

如果需要对打包内容做更多控制,比如排除冲突类,可以用shade插件:

在pom.xml的<build><plugins>中添加:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>de.mycompany.weldapp.App</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

打包后运行生成的jar(默认还是原文件名,但已经包含所有依赖)即可。

额外优化建议

  • 你pom里的maven-compiler-plugin被当成依赖添加了,这是错误的,应该把它移到<build><plugins>里,用来指定Java版本:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

然后删除<dependencies>里的maven-compiler-plugin依赖。

  • cdi-api的scope设为provided没问题,但weld-se-shaded已经包含了CDI API的实现,所以这个依赖可以选择保留或者删除,不影响最终运行。

按照上面的步骤修改后,你的应用应该就能正常运行,输出Hello World了。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:29:02