2017-06-09 4 views
0

Eclipse Neonから最新のJBoss Toolsを使用してEARをWildfly 10にデプロイしようとしています。これは、耳で私の最初の試みですので、私は自分自身を文書化し、これは私が思い付いた構造である:Maven EAR依存構造

Mavenのモジュール:

  • api(タイプjar、無DEPS):インターフェイスが含まれていMyServicePerson
  • ejb(タイプejbは、apiに依存):MyService@Stateless実装とPerson@Entity実装を含んでいます。
  • war(タイプwarapiに依存):MyServiceを使用するJAX-RSリソースが含まれています。
  • ear(タイプearejbおよびwarに依存):EARモジュール。

(完全なソースは、ここを参照してください:https://github.com/heruan/maven-ear-example

問題がある、私はWildflyにこれを展開するときに、私が取得:

java.lang.NoClassDefFoundError: Failed to link ejb/MyServiceImpl: api/MyService 

のフルスタックトレース:

INFO [org.jboss.weld.deployer] (MSC service thread 1-6) WFLYWELD0003: Processing weld deployment ear-1.0.0.ear 
WARN [org.jboss.modules] (MSC service thread 1-6) Failed to define class ejb.MyServiceImpl in Module "deployment.ear-1.0.0.ear.ejb-1.0.0.jar:main" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link ejb/MyServiceImpl (Module "deployment.ear-1.0.0.ear.ejb-1.0.0.jar:main" from Service Module Loader): api/MyService 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.__newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:446) 
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:274) 
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:78) 
    at org.jboss.modules.Module.loadModuleClass(Module.java:606) 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351) 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at org.jboss.as.ee.utils.ClassLoadingUtils.loadClass(ClassLoadingUtils.java:21) 
    at org.jboss.as.ee.utils.ClassLoadingUtils.loadClass(ClassLoadingUtils.java:14) 
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:84) 
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:76) 
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:147) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) 
    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) 

私は何が欠けていますか?私の目標は、モジュールによって共有される共通のJPA永続ユニットを持つ最も基本的なEARを持つことです。

答えて

0

私は問題が何であるかを知りました:複製.classファイル。 Maven EARプラグインが重複した依存関係を避けるほど巧妙ではないようだから、明示的にそれらをprovidedとして設定する必要があります。

例えば、サンプルプロジェクト内の溶液がwarpom.xmlprovidedようapiモジュールを設定することである。

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>api</artifactId> 
    <version>1.0.0</version> 
    <scope>provided</scope> 
</dependency> 
関連する問題