我正在使用Eclipse(Helios)和“m2eclipse”插件。我正在开发一个基于Maven的Web应用程序项目,我在Eclipse内部设置的本地Tomcat服务器上进行测试。
一般来说,这或多或少都有效。 “m2eclipse”有时可能是片状的...但是在大多数情况下它会使我的POM和我的Eclipse项目设置保持同步,同样在Tomcat中保持已部署的代码最新。
然而,最近我添加了皱纹。我有一个JavaScript包含文件,从测试环境到实际生产环境时需要有所不同。这些差异太大,无法通过Maven过滤和令牌替换进行干净处理。我需要的是在我的项目中保留两个单独的文件,并且只部署适合构建配置文件的文件。
我在Maven POM中用一些“targetPath”技巧完成了这个:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<!-- take the stuff from a "prod" or "non-prod" subdirectory and copy it one level up -->
<directory>src/main/webapp/js/${profile.name}</directory>
<targetPath>js</targetPath>
</resource>
<resource>
<!-- now don't deploy those profile-specific subdirectories -->
<directory>src/main/webapp/js</directory>
<excludes>
<exclude>prod</exclude>
<exclude>non-prod</exclude>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>
这构建了一个完美的WAR文件,当我部署一些外部Tomcat服务器时,它可以正常工作。但是,问题是Eclipse在Eclipse中运行Tomcat时不使用该WAR文件。相反,Eclipse使用应用程序的爆炸版本,部署到一个神秘的目录,如下所示:
<workspace>/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/MyApp
...显然应用程序的文件被复制到此位置,在Maven执行上面显示的小技巧之前。因此,在Eclipse内部进行本地测试时,预期位置根本不存在JavaScript包含。
有解决这个问题的方法吗?可能是Eclipse更改或Maven更改,将文件从Maven的“目标”目录拉到Eclipse的“wtpwebapps”目录中?也许还有另一种方法来解决特定于配置文件的包含文件问题?
答案 0 :(得分:10)
从eclipse(Helios)3.6开始,“Java EE Module Dependencies”选项被“Deployment Assembly”选项取代。您可以在此“部署程序集”选项中配置要部署到Eclipse内部运行的tomcat的文件(项目属性---&gt;部署程序集)
答案 1 :(得分:1)
您可以使用maven-cargo-plugin部署到本地服务器,而不是直接从Eclipse运行。这将使用你的maven生成的战争。
如果您正在进行的测试可以自动化,那么可以将其作为完全由maven运行的集成测试套件的一部分。