Rom*_*las 11 eclipse maven maven-eclipse-plugin
注意:我在这个问题的第一个版本中没有得到任何回复,因此我将其修改为更通用的...
上下文
我的项目分为几个maven模块和几个web应用程序.这是结构:
my-project
+ pom.xml
+-- commons
+-- persistence
+-- ...
+-- web-app-1
+-- web-app-2
+-- ...
Run Code Online (Sandbox Code Playgroud)
所有Web应用程序都共享公共资源,例如JS,CSS和图像文件.
web-app-X我决定创建另一个名为web-resourcesWAR项目的项目,而不是在每个项目中复制这些资源.结构如下:
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
Run Code Online (Sandbox Code Playgroud)
Maven的
在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>
...
Run Code Online (Sandbox Code Playgroud)
所以,当我建立我的WAR项目,它首先得到web-resources.war(建之前),将它解压缩,并建立在它之上的web-app-Xweb应用.这样,我的WAR文件还将包含一个web-resources/包含共享资源的目录.
这是战争叠加原则.
所以从Maven的角度来看,一切都很好!
日食
现在,主要问题是:拥有良好的Eclipse配置.
问题:如何使用Eclipse正确管理当前配置?特别是,当我web-app-X使用Eclipse在Tomcat中部署任何...
请注意,我希望获得更多可自动化(?)配置,并避免任何手动步骤,因为这种配置应该被许多开发人员使用...
对我来说,最好的解决方案似乎是使用Eclipse 的链接资源.因此,我在我的web-app-Xpom.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>
...
Run Code Online (Sandbox Code Playgroud)
当我运行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>
Run Code Online (Sandbox Code Playgroud)
现在,我在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
Run Code Online (Sandbox Code Playgroud)
题
技术信息
Java 6,Maven 3.0.2,maven eclipse插件2.8,Eclipse 3.3.2(但我可以用更新版本的Eclipse测试),没有 m2eclipse插件.
从Servlet 3.0开始,您可以通过将资源放在src/main/resources/META-INF/resources目录中来共享资源.
当webapp部署时,Servlet 3.0会从上下文路径中提供这些资源.例如,在你的情况下......
web-resources
-- src
---- main
------ resources
-------- META-INF
---------- resources
------------ css
-------------- global.css
------------ images
-------------- background.png
Run Code Online (Sandbox Code Playgroud)
假设my_project依赖于web资源,并将其部署到url http://my.localhost:8080/myProject.
使用该配置,以下URL将解析为正确的资源:
如果资源与实际应用程序之间存在名称冲突,则应用程序将获胜.
确保您的web.xml声明您正在使用Servlet 3.0
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
Run Code Online (Sandbox Code Playgroud)
您可能想看看这篇博文。它涵盖了使用maven共享资源的方法:
http://www.sonatype.com/people/2008/04/how-to-share-resources-across-projects-in-maven/
| 归档时间: |
|
| 查看次数: |
7139 次 |
| 最近记录: |