我有一个带有父pom项目的Maven项目和3个maven-module项目。其中2个模块是编译为WAR文件的Java-EE Web应用程序。其中1个模块包含在其他2个项目之间共享的通用JAVA代码。共享JAVA代码很简单。
我的问题是如何共享常见的静态资源,如JavaScript,CSS和图像文件,而不是在每个Web模块中重复它们?我还希望这样做,以便我可以继续从Eclipse运行Web应用程序,并对Eclipse运行的服务器自动提供的静态文件进行更改。
答案 0 :(得分:4)
试试这个:
1
|-- pom.xml
|-- appsweb1 (war)
|-- appsweb2 (war)
|-- common (jar)
|-- src/main/java
|-- src/static_files
|-- pom.xml
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.2</version>
<executions>
<execution>
<id>default-copy-resources</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<overwrite>false</overwrite>
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/static_files</outputDirectory>
<resources>
<resource>
<directory>../common/src/main/static_files</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
Maven资源插件的文档:https://maven.apache.org/plugins/maven-resources-plugin/
答案 1 :(得分:0)
将@Eric的问题一分为二,我们有:
1)如何共享常见的静态资源,例如JavaScript,CSS和 图像文件而不在每个Web模块中复制它们?
根据Servlet 3.0规范,您可以在外部共享资源,将其放在源文件夹src / main / resources中。为了使其与动态文件(如jsp)一起使用,应将文件放在META-INF / resources文件夹中。然后,您的共享项目(jar)结构将如下所示:
mymodule
| src
| | main
| | java
| | [java code]
| | resources
| | META-INF
| | resources
| | [your static and dynamic files]
例如,如果您的共享js文件位于 src / main / resources / META-INF / resources / js / myjsfile.js 中,则可以使用以下路径将其加载到html文件中:
<script src="/js/myjsfile.js"></script>
。同样的方法对您的CSS文件也有效。
其他信息:您可以使用<jsp:include page=""/>
标签在页面中包含一个共享的jsp文件。并且,如果您使用的是Spring,并且已将viewResolver的前缀配置为“ / WEB-INF / view”之类的内容,则必须将动态文件包括在指定的文件夹中,也就是说,它们将被放置在文件夹中” src / main / resources / META-INF / resources / WEB-INF / view'。
2)我也想这样做,以便我可以继续 从Eclipse运行Web应用,并对我进行了更改 静态文件自动提供给Eclipse的运行服务器。
Eclipse的服务器插件使用项目的“部署程序集”配置上的信息来跟踪文件并自动发布更改。在共享项目中,可以通过两种方式修改部署程序集:a)右键单击项目->属性->部署程序集->添加->文件夹,然后选择文件夹包含要部署和监视的文件,或b)编辑配置文件“ .settings / org.eclipse.wst.common.component”,添加类似
<wb-module deploy-name="mymodule">
<wb-resource deploy-path="/" source-path="/src/main/resources"/>
</wb-module>
如果选择第二种方法,请当心,以免破坏部署任务的执行。
其他信息:如果使用Maven的资源插件来过滤资源,则可能要在部署程序集中添加“目标”文件夹,而不是“ src”文件夹,因为后者将包含未过滤的资源,并且属性-格式为$ {my.property}-未设置。