【发布时间】:2017-05-27 23:18:16
【问题描述】:
尝试从命令行运行 JAVA SE 可执行 jar 时出现以下异常:
Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: java.lang.Internand
at org.jboss.weld.executor.AbstractExecutorServices.checkForExceptions(AbstractExec
at org.jboss.weld.executor.AbstractExecutorServices.invokeAllAndCheckForExceptions()
at org.jboss.weld.executor.AbstractExecutorServices.invokeAllAndCheckForExceptions()
at org.jboss.weld.bootstrap.ConcurrentBeanDeployer.addClasses(ConcurrentBeanDeploye
at org.jboss.weld.bootstrap.BeanDeployment.createClasses(BeanDeployment.java:203)
at org.jboss.weld.bootstrap.WeldStartup.startInitialization(WeldStartup.java:374)
at org.jboss.weld.bootstrap.WeldBootstrap.startInitialization(WeldBootstrap.java:76
at org.jboss.weld.environment.se.Weld.initialize(Weld.java:556)
at org.jboss.weld.environment.se.StartMain.go(StartMain.java:44)
at org.jboss.weld.environment.se.StartMain.main(StartMain.java:53)
Caused by: com.google.common.util.concurrent.ExecutionError: java.lang.InternalError: Enclo at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) at com.google.common.cache.LocalCache.get(LocalCache.java:3932) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3936) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4806) at org.jboss.weld.util.cache.LoadingCacheUtils.getCacheValue(LoadingCacheUtils.java at org.jboss.weld.util.cache.LoadingCacheUtils.getCastCacheValue(LoadingCacheUtils. at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransforme at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransforme at org.jboss.weld.bootstrap.AnnotatedTypeLoader.loadAnnotatedType(AnnotatedTypeLoad at org.jboss.weld.bootstrap.AnnotatedTypeLoader.loadAnnotatedType(AnnotatedTypeLoad at org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:97) at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer. at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer. at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFac at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFac at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.InternalError: Enclosing method not found at java.lang.Class.getEnclosingMethod(Class.java:1065) at sun.reflect.generics.scope.ClassScope.computeEnclosingScope(ClassScope.java:50) at sun.reflect.generics.scope.AbstractScope.getEnclosingScope(AbstractScope.java:78 at sun.reflect.generics.scope.AbstractScope.lookup(AbstractScope.java:96) at sun.reflect.generics.scope.AbstractScope.lookup(AbstractScope.java:96) at sun.reflect.generics.scope.AbstractScope.lookup(AbstractScope.java:96) at sun.reflect.generics.scope.AbstractScope.lookup(AbstractScope.java:96) at sun.reflect.generics.factory.CoreReflectionFactory.findTypeVariable(CoreReflecti at sun.reflect.generics.visitor.Reifier.visitTypeVariableSignature(Reifier.java:165 at sun.reflect.generics.tree.TypeVariableSignature.accept(TypeVariableSignature.jav at sun.reflect.generics.repository.MethodRepository.getReturnType(MethodRepository. at java.lang.reflect.Method.getGenericReturnType(Method.java:255) at org.jboss.weld.annotated.slim.backed.BackedAnnotatedMethod.(BackedAnnotate at org.jboss.weld.annotated.slim.backed.BackedAnnotatedMethod.of(BackedAnnotatedMet at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods..java:195) at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods..java:188) at org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:35) at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$EagerlyInitializedLazyVdType.java:156) at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.188) at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.188) at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.(BackedAnnotatedT at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.of(BackedAnnotatedType. at org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.lo at org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.lo at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.j at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2315) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2278) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2193) ... 18 more
但是我能够在 Eclipse 中成功运行该程序,但是一旦打包到 jar 中,我总是会遇到这个错误。
这是我的 maven 包插件:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<!-- Build an executable JAR -->
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>org.jboss.weld.environment.se.StartMain</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
这是我如何引导 Weld:
public static void main(String[] args) {
//Start CDI container
WeldContainer weldContainer = WeldFactory.INSTANCE.getWeldContainer();
try {
MainThread mainExecutor = weldContainer.instance().select(MainThread.class).get();
mainExecutor.run();
} catch (Exception e) {
LOG.error("Fatal error",e);
}finally {
//Shutdwon CDI container
weldContainer.shutdown();
}
}
// @Inject
// MainThread mainExecutor;
//
// public void main(@Observes ContainerInitialized event){
// try {
// //MainThread mainExecutor = weldContainer.instance().select(MainThread.class).get();
// mainExecutor.run();
// } catch (Exception e) {
// LOG.error("Fatal error",e);
// }finally {
// //Shutdwon CDI container
// //weldContainer.shutdown();
// }
//
// }
(我已经尝试了注释和未注释的代码,但仍然遇到相同的错误)。 任何帮助都会很棒,我真的尝试了所有方法。
【问题讨论】:
-
这看起来像是 Eclipse 可能提供的依赖问题,但在打包应用程序时会丢失。检查您是否有一些依赖项声明为提供或可选等
-
感谢您的回复,我认为我的主要问题是:'weld.environment.se.StartMain 2017-01-12 21:34:43 INFO Version:155 - WELD-000900: 2.4.1 (最终)线程“主”java.lang.IllegalStateException 中的异常:WELD-ENV-002009:无法初始化 Weld SE 容器 - 在 org.jboss.weld.environment.se.Weld.createDeployment(Weld.java :722) org.jboss.weld.environment.se.Weld.initialize(Weld.java:592) org.jboss.weld.environment.se.StartMain.go(StartMain.java:44) org.jboss。 weld.environment.se.StartMain.main(StartMain.java:53)'
-
我也检查了我的依赖关系,一切似乎都正确'
org.jboss.weld.se weld-se-core 2.4 .1.Final 'org.jboss.weld.se weld-se 2.3.3.Final -
想到两件事,不确定是哪个原因。首先,确保您的 JAR 包含
beans.xml(这可能是“找不到 bean 存档”异常)。其次,为什么你有两个 Weld 依赖项和两个不同的版本?!此外,您不需要两者,您应该只使用org.jboss.weld.se:weld-se,它是weld-se-core的阴影版本。 -
你说得对,问题来自我的 bean.xml 文件。我的 jar 不包含我的 bean.xml 文件,所以我在 jar 中添加了一个 `bean-discovery-mode="annotated" `,现在我可以成功运行我的 jar。这里出现了另一个问题:我的程序根本没有运行,我在控制台输出中看到焊接成功启动和关闭,而无需执行我的 mainThread.run()。这是控制台输出` INFO WELD STATIC_INSTANCE 已初始化 INFO Bootstrap:245 - WELD-ENV-002001: Weld SE 容器 STATIC_INSTANCE 关闭 Weld SE 容器 STATIC_INSTANCE 被关闭挂钩关闭
标签: java maven cdi executable-jar weld-se