在使用Spring多年后,我正在使用EJB 3.2和Maven开发Java EE 7应用程序。我想要的一件事是将EJB Jars与Web应用程序分开部署,以便我可以独立开发。在WAR中包含EJB Jars会导致应用服务器在WAR的上下文中重新定义EJB,我不希望这种情况发生。
规定的方法是让maven使用此指令创建一个客户端jar:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<ejbVersion>3.2</ejbVersion>
<generateClient>true</generateClient>
<clientExcludes>
<clientExclude>**/*Impl.class</clientExclude>
</clientExcludes>
</configuration>
</plugin>
我从客户端JAR中排除任何Impls。
我遇到的问题是maven在安装阶段没有安装客户端jar。
我可以手动安装它: mvn install:install-file -Dfile = foo-1.0-client.jar -DgroupId = com.awesome -DartifactId = foo -Dversion = 1.0 -Dpackaging = jar -Dclassifier = client
我摆弄了很多并想出了这个
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<ejbVersion>3.2</ejbVersion>
<generateClient>true</generateClient>
<clientExcludes>
<clientExclude>**/*Impl.class</clientExclude>
</clientExcludes>
</configuration>
<executions>
<execution>
<id>package</id>
<phase>package</phase>
<goals>
<goal>ejb</goal>
</goals>
</execution>
<execution>
<id>install</id>
<phase>install</phase>
</execution>
</executions>
</plugin>
</plugins>
然而,这是不恰当的。这会将客户端安装为新工件,而不是与分类器客户端相同的工件。当您将客户端包含在另一个应用程序中时,您应该使用ejb-client。这将查找包含正常工件foo-1.0.jar的文件夹,并查找具有分类器客户端的内容。
<dependency>
<groupId>com.awesome</groupId>
<artifactId>foo</artifactId>
<version>${com.awesome.version}</version>
<type>ejb-client</type>
</dependency>
难倒在这里,任何想法?