注意:我在这个问题的第一个版本中没有得到任何回应,所以我将其修改为更通用...
语境
我的项目分为几个 Maven 模块和几个 Web 应用程序。这是结构:
my-project
+ pom.xml
+-- commons
+-- persistence
+-- ...
+-- web-app-1
+-- web-app-2
+-- ...
所有的 Web 应用程序共享公共资源,例如 JS、CSS 和图像文件。
我没有在每个 中复制这些资源web-app-X
,而是决定创建另一个名为 的项目web-resources
,它是一个 WAR 项目。结构如下:
my-project
+ pom.xml
+-- commons
+-- persistence
+-- ...
+-- web-app-1
+-- web-app-2
+-- ...
+-- web-resources
+-- pom.xml
+-- src/main/webapp
+-- web.xml (which is almost empty, just need to be present for Maven)
+-- web_resources
+-- css
+-- images
+-- javascript
马文
在 Maven 2(或 Maven 3,因为我刚刚将我的项目迁移到 maven 3.0.2)中,此配置很容易管理,因为所有都web-app-X
声明web-resources
为依赖项:
<groupId>foo.bar</groupId>
<artifactId>web-app-1</artifactId>
...
<dependencies>
<dependency>
<groupId>foo.bar</groupId>
<artifactId>web-resources</artifactId>
<version>${preclosing-version}</version>
<type>war</type>
</dependency>
...
因此,当我构建我的 WAR 项目时,它首先获取web-resources.war
(之前构建的),解压缩它,然后在它之上构建Web应用web-app-X
程序。这样,我的 WAR 文件还将包含一个名为web-resources/
包含共享资源的目录。
这就是战争叠加原则。
所以从 Maven 的角度来看,一切都很好!
蚀
现在,主要问题出现了:拥有良好的 Eclipse 配置。
问题:如何使用我当前的配置由 Eclipse 正确管理?特别是,当我web-app-X
使用 Eclipse 在 Tomcat 中部署任何内容时...
请注意,我想获得更自动化的(?)配置,并避免任何手动步骤,因为这个配置应该被许多开发人员使用......
对我来说,最好的解决方案似乎是使用 Eclipse 的链接资源。因此,我在web-app-X
pom.xml 中设置了以下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<wtpversion>1.5</wtpversion>
<linkedResources>
<linkedResource>
<name>web_resources</name>
<type>2</type>
<location>${project.basedir}\..\web-resources\src\main\webapp\web_resources</location>
</linkedResource>
</linkedResources>
</configuration>
</plugin>
...
当我运行mvn eclipse:eclipse
配置时,它会在我的.project
文件中成功添加以下信息:
<projectDescription>
...
<linkedResources>
<link>
<name>web_resources</name>
<type>2</type>
<location>C:\dev\project\web-resources\src\main\webapp\web_resources</location>
</link>
</linkedResources>
<projectDescription>
现在,我在 Eclipse 中导入我的项目。问题:在 中Project properties > Java Build Path > Source
,我看不到链接源。我只看到我的四个 Maven 默认目录(、src/main/java
和src/main/resources
)。奇怪的是,当我尝试手动添加链接资源时,它拒绝并说它已经存在...src/test/java
src/test/resources
因此,当我在 Eclipse 中的 Tomcat 上部署我的 Web 应用程序时,它没有部署 web_resources 目录,因此我没有部署 CSS / JS / 图像。
经过一些测试,似乎我必须做两个修改:
<classpathentry kind="src" path="web_resources" output="src/main/webapp/web_resources"/>
在我的.classpath
文件中添加该行;- 删除文件
<project>preclosing-web-resources</project>
中的。.project
请注意,使用此配置,Eclipse 将复制(并保持同步)我的 web_resources 项目的内容web-app-X/src/main/webapp/web_resources
,但这不是问题(此目录被 SCM 忽略)。
我找到的唯一自动化解决方案是创建一个简单的 Maven 插件来执行前面的两个修改,然后运行以下命令(或使用 .bat 文件):
mvn eclipse:clean eclipse:eclipse myEclipsePlugin:eclipse
问题
- 有没有更好的方法来管理这样的配置?
技术信息
Java 6、Maven 3.0.2、maven eclipse 插件 2.8、Eclipse 3.3.2(但我可以使用更新版本的 Eclipse 进行测试),没有m2eclipse 插件。