I create a simple JavaSE app using Weld SE. I'm I try to run with gradle run it throws an exception:
: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
What I understand is that it cannot find beans.xml file. But it is there in src/main/resources/META-INF/beans.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>
My main class is:
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);
}
}
the build gradle file is:
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'
The problem is that gradle run
does not build the jar file for your app. It simply compiles the classes and runs the main class with the resources directory on the classpath (do gradle --info run
to see this for yourself). Weld requires a bean archive which is a jar file that contains META-INF/beans.xml
or a war file that contains WEB-INF/classes/META-INF/beans.xml
. It's not enough for beans.xml
to just be on the classpath.
To get around this, since you're using the application plugin, just do a gradle installDist
and run the shell script or batch file in build/install/myapp/bin
.