当前位置: 首页 > 知识库问答 >
问题:

尝试运行Weld Se Applicaton时出错-无法初始化Weld Se容器-未找到bean存档

赫连智
2023-03-14

我使用Weld SE创建了一个简单的JavaSE应用程序。我尝试用gradle run运行它会引发异常:

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:runmai 17, 2016 12:55:55 AM org.jboss.weld.bootstrap.WeldStartup <clinit>
INFO: WELD-000900: 2.3.4 (Final)
Exception in thread "main" java.lang.IllegalStateException: WELD-ENV-002009: Weld SE container cannot be initialized - no bean archives found
        at org.jboss.weld.environment.se.Weld.createDeployment(Weld.java:690)

        at org.jboss.weld.environment.se.Weld.initialize(Weld.java:570)
        at br.com.alexpfx.crawler.run.Main.main(Main.java:14)
 FAILED
1 result found for 'bean-discovery-mode'Finding with Options: Case Insensitive

y
bean-discovery-mode
1 found
Find






Replace in current buffer
Replace
Replace All
Gradle: runFile 0Project 0No Issuessrc\main\resources\META-INF\beans.xml10:1
CRLFUTF-8XML1 update

据我所知,它找不到豆子。xml文件。但它存在于src/main/resources/META-INF/bean中。xml:

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all"
        version="1.1">


</beans>

我的主要课程是:

package br.com.alexpfx.crawler.run;
import org.jboss.weld.environment.se.*;
import javax.enterprise.inject.*;
import javax.inject.*;
import br.com.alexpfx.crawler.*;
public class Main {

    @Inject
    private @Named("SuperMarket") Crawler crawler;


    public static void main(String[] args) {
        Weld weld = new Weld();
        WeldContainer container = weld.initialize();
        Main main = container.instance().select(Main.class).get();
        main.run();
        weld.shutdown();
    }


    public void run() {

        System.out.println (crawler);

    }
}

构建梯度文件是:

apply plugin: 'java'
apply plugin: 'application'



repositories{
    mavenCentral()
}


dependencies{
    // http://mvnrepository.com/artifact/org.jsoup/jsoup
    compile group: 'org.jsoup', name: 'jsoup', version: '1.9.1'

    // http://mvnrepository.com/artifact/org.jboss.weld.se/weld-se-core
    compile group: 'org.jboss.weld.se', name: 'weld-se-core', version: '2.3.4.Final'



}

sourceCompatibility = '1.8'
version = '1.0'
mainClassName = 'br.com.alexpfx.crawler.run.Main'

共有3个答案

程景胜
2023-03-14

我通过添加源集解决了这个问题。主要的构建中的资源。格雷德尔:

sourceSets.main.resources {
   exclude 'META-INF/beans.xml'
}
  classes {
   inputs.dir 'src/main/resources/META-INF/beans.xml'
   outputs.dir "$buildDir/classes/main/META-INF/beans.xml"
} << {
   copy {
      from('src/main/resources') { include 'META-INF/beans.xml' }
      into "$buildDir/classes/main/"
   }
}

举一个例子:

apply plugin: 'java'
apply plugin: 'application'



repositories{
    mavenCentral()
}


dependencies{
    // http://mvnrepository.com/artifact/org.jsoup/jsoup
    compile group: 'org.jsoup', name: 'jsoup', version: '1.9.1'

    // http://mvnrepository.com/artifact/org.jboss.weld.se/weld-se-core
    compile group: 'org.jboss.weld.se', name: 'weld-se-core', version: '2.3.4.Final'
}

sourceSets.main.resources {
   exclude 'META-INF/beans.xml'
}
  classes {
   inputs.dir 'src/main/resources/META-INF/beans.xml'
   outputs.dir "$buildDir/classes/main/META-INF/beans.xml"
} << {
   copy {
      from('src/main/resources') { include 'META-INF/beans.xml' }
      into "$buildDir/classes/main/"
   }
}

sourceCompatibility = '1.8'
version = '1.0'
mainClassName = 'br.com.alexpfx.crawler.run.Main'
骆照
2023-03-14

我已经尝试了@drenedo提供的解决方案(对不起,我没有足够的声誉发表评论),以下代码对我来说很好:

sourceSets.main.resources {
    exclude 'META-INF/beans.xml'
}
classes {
    doLast{
        copy {
            from('src/main/resources') { include 'META-INF/beans.xml' }
            into "$buildDir/classes/java/main/"
        }
    }
}

我对以下代码的用途有点困惑。因为src/main/resources/META-INF/bean。xml$buildDir/classes/main/META-INF/bean。xml不是目录,此代码将导致错误。所以我只是简单地删除它:

inputs.dir 'src/main/resources/META-INF/beans.xml'
outputs.dir "$buildDir/classes/main/META-INF/beans.xml"

由@J.Lenthe回答的解决方案对我也很有效。

您也可以尝试这个bean发现问题时使用焊接与gradle应用程序插件:

task copyResources(type: Copy) {
    from "${projectDir}/src/main/resources"
    into "${buildDir}/classes/java/main"
}
processResources.dependsOn copyResources

Gradle 4为类使用不同的输出目录,因此请记住使用${buildDir}/classes/java/main而不是${buildDir}/classes/main

翟理
2023-03-14

问题是,gradle run没有为你的应用构建jar文件。它只需编译类并使用类路径上的resources目录运行主类(dogradle--info run亲自查看)。Weld需要一个bean存档,它是一个包含META-INF/bean的jar文件。xml或包含WEB-INF/classes/META-INF/bean的war文件。xml。对于bean来说,这还不够。xml只是在类路径上。

为了解决这个问题,由于您使用的是应用程序插件,只需执行gradle installDist并在build/install/myapp/bin中运行shell脚本或批处理文件

 类似资料:
  • null 代码构建良好,但当我运行它时,它会在下面抛出错误

  • 问题内容: 我在让我的MySQL容器运行来自Docker Compose的一些初始化脚本(创建一些数据库)时遇到问题。根据Docker Hub上的文档,我将文件挂载在其中,但无济于事。 我的撰写文件如下: 的内容只有1个文件: 一旦启动,MySQL正在运行,但未创建数据库。服务容器还成功链接到MySQL容器。扑向MySQL容器;初始化脚本已成功安装在正确的位置。 有人可以在这里看到一些明显的问题吗

  • 我想找到api密钥,在我的设备上使用和测试我的应用程序(我的意思是在发布之前,我想在将设备连接到笔记本电脑时,我想测试程序并查看设备上的地图)。无论如何,我使用这一行来查找md5和sh1,但当在cmd中编写这一行时,我看到下面的错误!为什么?我如何解决这个问题? 我写道: C: \程序文件\ Java\jdk1.7.0\U 03\bin 但我在cmd中遇到了这个错误: 初始化虚拟机java/lan

  • 我正在尝试实现EJB命令来通信两个jsf项目。 我创建了一个EAR,其中有我的两个jsf项目+ejb。

  • 目前,我正在使用头盔和地形在GCP上部署我的詹金斯。这是我的地形代码: 但当我尝试在管道上运行docker命令时,我得到了以下错误: [vision_front_new_master-pth4udtqvsas7vicpco2ufhiem6b37lqylejt5bmat36ayx77ka]运行shell脚本 docker拉节点:碳 /home/jenkins/workspace/vision\u f

  • 目前我正在做一个项目,我需要将第三方JAR转换到我们的Karaf D-OSGi应用程序中。我们不想更改jar中的任何代码,但由于源代码有限,我们可以调试到jar中。 问题是第三方jar依赖于log4j-1.2.9 jar。然而,当在运行时调用第三方jar时,无法从第三方jar中找到logManager.class。 组织。阿帕奇。cxf。拦截器。错误:org/apache/log4j/LogMan