在maven war build上重命名静态文件

时间:2011-12-09 21:39:03

标签: maven maven-2

我正在试图找出一种方法,可以在同一时间重命名我的Web项目中的静态文件。

我需要的是能够过滤所有静态文件名以添加版本号或类似内容,以避免被浏览器缓存。

将custom.css转换为custom-1.23.css,其中1.23将是给定过滤器的值。

此行为看起来与资源插件对文件内容的作用非常相似,但我无法找到对文件名执行相同操作的方法。

有谁知道类似的东西?

非常感谢

2 个答案:

答案 0 :(得分:1)

您可以更改服务目录而不是文件名,例如

/静态/ $ {版本} /custom.css

资源插件可以让你更改战争中的目标目录。

答案 1 :(得分:0)

1)使用任何能够复制和重命名资源的Maven插件。例如,复制重命名Maven插件。配置插件以复制要版本的所有静态资源,并将其放入目标目录中的新目录,例如target / static_versioned:

   func addMoveAvatarGestures(sceneView: SCNView) {
        let pan = gestureWithRootNode(target:self, action:#selector(rotateAvatar(_:)))
        if let scene = sceneView.scene {
            pan.rootNode = scene.rootNode
        }
        pan.maximumNumberOfTouches = 1
        pan.minimumNumberOfTouches = 1
        pan.delegate = self
        self.rotationGesture = pan
        sceneView.addGestureRecognizer(pan)
    }

    @objc func rotateAvatar(_ sender: gestureWithRootNode) {

        guard let nodeToRotate = sender.rootNode else {
            return
        }


        let translation = sender.translation(in: sender.view!)
        let xToAngle = Float(self.view.frame.width) / Float(360)
        let newAngleY = Float(translation.x) * xToAngle
        let velocity = sender.velocity(in: sender.view!)
        if (fabs(velocity.x) > fabs(velocity.y)) {
            sender.setTranslation(CGPoint.zero, in: sender.view!)
            nodeToRotate.eulerAngles.y += nodeExtensions.deg2rad(newAngleY)
        }
    }

2)配置maven-war-plugin在war文件中添加版本化的静态文件:

@SerializedName("name")

3)Maven将版本文件和原始文件都复制到结果war文件中,因此需要排除原始文件:

@JsonProperty("name")

值得一提的是,目标目录仍然具有原始文件和版本文件,但是war文件仅包含版本文件。

4)使用maven-war-plugin的过滤功能来重命名静态资源链接,以便所有链接都指向版本化的资源:

<plugin>
    <groupId>com.coderplus.maven.plugins</groupId>
    <artifactId>copy-rename-maven-plugin</artifactId>
    <version>1.0.1</version>
    <executions>
        <execution>
            <id>copy-file</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <fileSets>
                    <fileSet>
                        <sourceFile>src/main/webapp/css/style.css</sourceFile>
                        <destinationFile>target/static_versioned/css/style_${project.version}.css</destinationFile>
                    </fileSet>
                    <fileSet>
                        <sourceFile>src/main/webapp/js/app.js</sourceFile>
                        <destinationFile>target/static_versioned/js/app_${project.version}.js</destinationFile>
                    </fileSet>
                </fileSets>
            </configuration>
        </execution>
    </executions>
</plugin>

例如,像<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> <configuration> <webResources> <resource> <directory>target/static_versioned</directory> </resource> </webResources> </configuration> </plugin> 这样的链接将重命名为<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> <configuration> <packagingExcludes>**/css/style.css,**/js/app.js</packagingExcludes> <webResources> <resource> <directory>target/static_versioned</directory> </resource> </webResources> </configuration> </plugin>

完整示例如下:https://github.com/dmitrysobolev/maven-war-plugin-js-versioning-example