用于静态文件的 Maven 模块

Maven module for static files

我有一个带有 spring 和 maven 的网络应用程序。该应用程序分为 Maven 模块。我有一个生成 war 的 "application-web" 模块。另一个生成耳朵的 "application-ear" 模块。另一个 "application-static" 带有 css、js 和生成 zip 文件的图像。

这将是我的申请大纲:

我想部署 "static" 模块的 eclipse 使用文件,而不是使用 "application/src/main/webapp" 目录中的文件。我怎样才能做到这一点?有可能吗?

您可以使用 maven 依赖插件解压包含在 zip 文件中的静态资源,方法如下:

在您的申请中-web.pom

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>unpack-resources</id>
            <goals>
                <goal>unpack-dependencies</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <outputDirectory>resources</outputDirectory>
                <includeArtifactIds>application-static</includeArtifactIds>
                <includeGroupIds>your group id</includeGroupIds>
                <includes>**/*.js,**/*.css</includes>
            </configuration>
        </execution>
    </executions>
</plugin

这项工作:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.10</version>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                    <configuration>
                        <excludeTypes>pom</excludeTypes>
                        <includeArtifactIds>application-static</includeArtifactIds>
                        <includeGroupIds>com.foo.foo.application</includeGroupIds>
                        <outputDirectory>src/main/webapp</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <finalName>${project.artifactId}-${project.version}</finalName>
</build>

但是我还有一个问题,这个解决方案只在我执行清理包时复制静态文件。如果我 运行 使用 eclipse 的 application-web 并且我在 application-static 中的 js 文件中进行了更改,则这些更改在我执行 clean package 之前不会生效。有什么解决办法吗?

不要浪费时间解包资源,一切都开箱即用:

  1. 资源包:总是从类路径加载,无论它是展开的 (WEB-INF/classes) 还是压缩的 (WEB-INF/lib)
  2. 提供静态资源:将它们捆绑在一个 JAR 中并使用 Tomcat (Servlet 3.0) 功能从 META-INF/resources 提供服务,请参阅 here or use Spring's built in mvc:resources 元素。

只需在您的 WAR POM 中添加依赖项片段即可完成。