在maven模块之间共享静态资源

时间:2015-10-13 07:42:55

标签: java eclipse maven war static-files

我有一个带有父pom项目的Maven项目和3个maven-module项目。其中2个模块是编译为WAR文件的Java-EE Web应用程序。其中1个模块包含在其他2个项目之间共享的通用JAVA代码。共享JAVA代码很简单。

我的问题是如何共享常见的静态资源,如JavaScript,CSS和图像文件,而不是在每个Web模块中重复它们?我还希望这样做,以便我可以继续从Eclipse运行Web应用程序,并对Eclipse运行的服务器自动提供的静态文件进行更改。

2 个答案:

答案 0 :(得分:4)

试试这个:

1

 |-- pom.xml
    |-- appsweb1 (war)
    |-- appsweb2 (war)
    |-- common (jar)
        |-- src/main/java
        |-- src/static_files
        |-- pom.xml
  1. 添加pom appsweb1,appsweb2或将其添加到pom parent中,只需在child中添加groupId,artifactId:
  2. <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}-未设置。