将压缩文件放入 jar

Posted

技术标签:

【中文标题】将压缩文件放入 jar【英文标题】:Place minified files into jar 【发布时间】:2016-01-13 14:25:23 【问题描述】:

我将使用 maven 依赖项 com.samaxes.maven#minify-maven-plugin 来缩小我的前端项目。这个前端项目被打包成一个 jar(java 存档)——所以我没有 war 文件,因为我使用 Spring boot。

通过底部的配置生成 *.min.js 和 *.min.css 文件,但不会打包到 jar 文件中。我已经阅读了一些线程并尝试了一些方法但没有成功:在 JAR 文件中仍然有未缩小的 css 和 js 文件。

有没有人暗示我能做什么。我的项目中有很多 css 和 js 文件,位于不同的文件夹结构中,缩小后的文件应该像未缩小的文件一样放在同一个位置。

<build>
<plugins>
  <plugin>
    <groupId>com.samaxes.maven</groupId>
    <artifactId>minify-maven-plugin</artifactId>
    <version>1.7.4</version>
    <executions>
      <execution>
        <id>default-minify</id>
        <phase>package</phase>
        <configuration>
          <charset>UTF-8</charset>
          <skipMerge>true</skipMerge>
          <nosuffix>true</nosuffix>
          <closureCompilationLevel>WHITESPACE_ONLY</closureCompilationLevel>
          <webappSourceDir>src/main/resources</webappSourceDir>
          <cssSourceDir>./</cssSourceDir>
          <cssTargetDir>./minified</cssTargetDir>
          <cssSourceIncludes>
            <cssSourceInclude>**/*.css</cssSourceInclude>
          </cssSourceIncludes>
          <cssSourceExcludes>
            <cssSourceExclude>**/*.min.css</cssSourceExclude>
          </cssSourceExcludes>
          <jsSourceIncludes>
            <jsSourceInclude>**/*.js</jsSourceInclude>
          </jsSourceIncludes>
          <jsSourceExcludes>
            <jsSourceExclude>**/*.min.js</jsSourceExclude>
          </jsSourceExcludes>
          <jsEngine>CLOSURE</jsEngine>
        </configuration>
        <goals>
          <goal>minify</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

[编辑]

我以这种方式编辑了 Maven 插件。 我真的必须使用 src/main/recoures - 这是我们项目的规范。

我现在的问题是,在主文件夹路径 public/app 下的不同文件夹中的文件被缩小了,但是带有缩小文件的文件夹与我的 public 处于同一级别 文件夹是。

所以我需要这样的东西:

<webappTargetDir>**public/app/**$project.build.outputDirectory</webappTargetDir>

有没有可能这样做?

<build>
<plugins>
  <plugin>
    <groupId>com.samaxes.maven</groupId>
    <artifactId>minify-maven-plugin</artifactId>
    <version>1.7.4</version>
    <executions>
      <execution>
        <id>default-minify</id>
        <phase>prepare-package</phase><!-- When omitted defaults to 'process-resources' -->
        <configuration>
          <charset>UTF-8</charset>
          <skipMerge>true</skipMerge>
          <closureCompilationLevel>WHITESPACE_ONLY</closureCompilationLevel>
          <webappSourceDir>src/main/resources/public/app</webappSourceDir>
          <webappTargetDir>$project.build.outputDirectory</webappTargetDir>
          <cssSourceDir>./</cssSourceDir>
          <cssSourceIncludes>
            <cssSourceInclude>**/*.css</cssSourceInclude>
          </cssSourceIncludes>
          <jsSourceDir>./</jsSourceDir>
          <jsSourceIncludes>
            <jsSourceInclude>**/*.js</jsSourceInclude>
          </jsSourceIncludes>
          <jsEngine>CLOSURE</jsEngine>
        </configuration>
        <goals>
          <goal>minify</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

使用上面的 minify-maven-plugin 配置,我在左侧得到以下文件夹结构,但我需要在右侧的文件夹结构。有没有可能这样做?

【问题讨论】:

首先你应该将minify插件的阶段更改为prepare-package此外你不应该使用src/main/resources并将webappTargetDir更改为$project.build.outputDirectory(目标/类文件夹)......如果您使用在资源阶段复制到target/classessrc/main/resources 文件夹,这并不是您真正想要的...... 感谢您的共鸣。有没有可能将缩小的文件放在原始文件路径的位置?非常感谢! 如果你尝试&lt;webappTargetDir&gt;$project.build.outputDirectory/public/app&lt;/webappTargetDir&gt;会怎样? 非常感谢。这几乎就是我想要的。我目前唯一的问题是如何不打包未缩小的文件 - 目前两者都已打包。如果这个问题有另一个答案,那就太好了。 【参考方案1】:

文件从webappSourceDir 相对复制到webappTargetDir。因此,如果您希望结构匹配,您应该使用类似的模式。意思是,应该是

<webappSourceDir>src/main/resources</webappSourceDir>
<webappTargetDir>$project.build.outputDirectory</webappTargetDir>

<webappSourceDir>src/main/resources/public/app</webappSourceDir>
<webappTargetDir>$project.build.outputDirectory/public/app</webappTargetDir>

我已经提交了工作示例here

【讨论】:

非常感谢!我还有一个问题。如何防止将未缩小的文件打包到 jar 中。 如果名字相同,会被minifier重写。如果它们具有不同的名称,则必须通过通常的资源排除机制排除它们:maven.apache.org/plugins/maven-resources-plugin/examples/…。

以上是关于将压缩文件放入 jar的主要内容,如果未能解决你的问题,请参考以下文章

HadoopLZO压缩配置

怎样在jar格式的压缩包中添加文件,我每次添加文件进去,他都会提示要重新压缩成一个压缩包,而不是直

pom配置多个jar包压缩成zip

c# - 如何将文件写入内存流,压缩其中三个内存流,然后将其放入另一个内存流?

如果使用 jar,则从 jar 中解压缩文件,然后将提取的文件复制到目录

如何把一个压缩好的文件,拆分成几个压缩文件?