【问题标题】:Sharing static resources between maven modules在 Maven 模块之间共享静态资源
【发布时间】:2015-10-13 07:42:55
【问题描述】:

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

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

【问题讨论】:

  • 嗨@Eric,我有点晚了哈哈,但希望我能帮助其他面临同样问题的人,他们稍后会来检查这个问题。请在下面查看我的答案并给我反馈。

标签: java eclipse maven war static-files


【解决方案1】:

试试这个:

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:
<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/

【讨论】:

  • 我是否必须在每次编辑静态文件时都运行它,或者 Eclipse 是否足够聪明,可以在文件更改时自动移动文件?我担心能否快速开发/测试我对文件所做的更改。
  • 我熟悉使用/创建 WAR 文件,但我从未听说过 WebJars。你能指出一个关于如何使用它的示例或文档吗?
  • 嗨,你能解释一下将配置放在父pom中并在子pom中读取它们的情况吗?非常感谢
  • 在父pom的pluginManagement中添加,在子进程中简单地使用maven-resources-plugin>,你也可以使用 +inherited=false
  • 在这种情况下,您应该熟悉带有 default-copy-resources 的覆盖默认进程,因此您将获得最终包中指定的文件和文件夹这个配置。
【解决方案2】:

将@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 文件中: &lt;script src="/js/myjsfile.js"&gt;&lt;/script&gt;。相同的方法对您的 css 文件有效。

附加信息:您可以使用&lt;jsp:include page=""/&gt; 标签在您的页面中包含一个共享的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 的资源插件来过滤资源,您可能希望在部署程序集中添加您的“target”文件夹,而不是您的“src”文件夹,因为后者将包含未过滤的资源,您的属性 - 格式为 ${my.property} - 未设置。

【讨论】:

    猜你喜欢
    • 2017-09-28
    • 2021-09-24
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多