【发布时间】:2017-04-22 03:21:39
【问题描述】:
我们在 Eclipse (neon) IDE 中有一个 JEE Vaadin 项目,我们使用 gradle 作为构建系统。但是我们的测试类有问题。如果我们用 gradle 构建我们的战争/耳朵,一切都很好。测试类不是战争档案的一部分。
但是,如果我们想从 Eclipse 内部将 ear 项目部署到 wildfly 服务器上,那么测试类似乎是 war 存档的一部分。因为在部署耳朵时,我们会遇到一些错误,例如:
...
Caused by: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.LinkageError: Failed to link com/coco_on/docFlow/vaadin/admin/TestAdminRoles (Module "deployment.DFl_EAR.ear.DFl_Vaadin.war:main" from Service Module Loader)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201)
at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
at org.jboss.weld.util.cache.LoadingCacheUtils.getCacheValue(LoadingCacheUtils.java:49)
at org.jboss.weld.resources.DefaultReflectionCache.getBackedAnnotatedTypeAnnotationSet(DefaultReflectionCache.java:169)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.getAnnotations(BackedAnnotatedType.java:112)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.getAnnotation(BackedAnnotatedType.java:98)
at org.jboss.weld.bootstrap.BeanDeployer.processPriority(BeanDeployer.java:105)
at org.jboss.weld.bootstrap.BeanDeployer.processAnnotatedTypes(BeanDeployer.java:174)
at org.jboss.weld.bootstrap.BeanDeployment.createTypes(BeanDeployment.java:224)
at org.jboss.weld.bootstrap.WeldStartup.startInitialization(WeldStartup.java:381)
at org.jboss.weld.bootstrap.WeldBootstrap.startInitialization(WeldBootstrap.java:76)
at org.jboss.as.weld.WeldStartService.start(WeldStartService.java:92)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
... 3 more
Caused by: java.lang.NoClassDefFoundError: com/vaadin/testbench/TestBenchTestCase
...
TestAdminRoles 是我们的测试类之一,TestBenchTestCase 是测试框架 (Vaadin Testbench) 中所需的类之一。但是这个测试框架会找不到,这也没关系,因为我们不想把这个库链接到 ear/war 中。
我们也看过这篇文章:https://stackoverflow.com/a/9820317/1465758
所以我们已经从部署中删除了src/test/ 目录,并为测试源目录设置了一个不同的 bin 目录。但没有成功。上面的错误依然存在。
所以我的问题是:如何配置 eclipse 以便 eclipse 不会将编译后的测试类放到 war 文件中?
【问题讨论】: