我需要几个配置文件进行部署。在 Maven POM 中,我定义了一个配置文件“dev”和一个属性“theHost”(作为 localhost):
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault> <!-- use dev profile by default -->
</activation>
<build>
</build>
<properties>
<theHost>localhost</theHost>
</properties>
</profile>
...
我已经filterDeploymentDescriptor
在 maven-ejb-plugin 上激活,以便告诉它过滤(替换)ejb-jar.xml 中的值:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>3.1</ejbVersion>
--> <filterDeploymentDescriptor>true</filterDeploymentDescriptor>
</configuration>
</plugin
最后,在 ejb-jar.xml 中,我指的是${theHost}
为 @Resource 属性“主机”获取所需的特定于配置文件的值:
<session>
<ejb-name>MongoDao</ejb-name>
<ejb-class>com.coolcorp.MongoDao</ejb-class>
<session-type>Stateless</session-type>
<env-entry>
<env-entry-name>host</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>${theHost}</env-entry-value>
</env-entry>
...
这一切都适用于常规的 Maven 构建。但是当我使用 GlassFish [EJBContainer.createEJBContainer()] 的嵌入式企业 Bean 容器运行 EJB 单元测试时,maven-ejb-plugin 似乎忽略了 filterDeploymentDescriptor=true。尽管我使用相同的“dev”配置文件运行 maven,但 EJB 看到的是“${theHost}”而不是“localhost”。
mvn.bat -Pdev test
有谁知道为什么在运行单元测试时替换不起作用?还有什么我必须特别为单元测试定义的东西,以便对 ejb-jar.xml 进行过滤吗?或者如果存在不同的配置文件,是一种更好的对 EJB 进行单元测试的方法?