【问题标题】:Minify maven plugin,does not add minified file to maven local repository缩小maven插件,不将缩小文件添加到maven本地存储库
【发布时间】:2016-03-11 06:30:39
【问题描述】:

我在 POM 中使用具有以下配置的 minify maven 插件 -

    <plugin>
            <groupId>com.samaxes.maven</groupId>
            <artifactId>minify-maven-plugin</artifactId>
            <version>1.7.4</version>
             <configuration>
                 <verbose>true</verbose>
                <fork>true</fork>
                <executable>${JAVA_HOME_1_7}/bin/javac</executable>
                <compilerVersion>1.7</compilerVersion>
            </configuration>
         <executions>
                <execution>
                    <id>crf</id>
                    <phase>package</phase>
                    <configuration>
                      <jsSourceDir>crf/js</jsSourceDir>
                      <jsSourceIncludes>
                            <jsSourceInclude>*.js</jsSourceInclude>
                        </jsSourceIncludes>
                        <jsTargetDir>crf/js</jsTargetDir>
                       <skipMerge>true</skipMerge>
                        <jsEngine>CLOSURE</jsEngine>
                        <nosuffix>true</nosuffix>
                        <closureCreateSourceMap>false</closureCreateSourceMap>
                    </configuration>
                    <goals>
                        <goal>minify</goal>
                    </goals>
                </execution>
                 <execution>
                    <id>bundle-configuration-minify</id>
                    <configuration>
                      <jsEngine>CLOSURE</jsEngine>
                      <closureCreateSourceMap>false</closureCreateSourceMap>
                    </configuration>
                    <goals>
                        <goal>minify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

当我构建组件(使用 mvn clean install 说'co​​mponent-war')时,我看到目标(component-war)有一个缩小的 JavaScript。但是 Maven 本地 repo 不包含缩小的文件。 因此,当我打包项目时(例如“project-ear”)目标不包含缩小文件。

我的 POM 中也有以下配置 -

<plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <packagingIncludes>WEB-INF/lib/urlrewritefilter-*.jar,WEB-INF/lib/xercesImpl-*.jar,WEB-INF/lib/io-*.jar,WEB-INF/lib/xtags-*.jar,**/*.xml,**/*.xsd,**/*.pdf,**/*.txt,**/*px,**/*dummyfile,**/*.properties,**/*.class,**/*.png,**/*.css,**/*.js,**/*.jsp,**/*.jspf,**/*.xsl,**/*.html,**/*.htm,**/*.vm,**/*.tld,**/*.gif,**/readme,**/*.zip,**/*.jpg,**/*.zul,**/*.zs,**/*.eot,**/*.svg,**/*.ttf,**/*.woff,**/*.swf
                </packagingIncludes>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

【问题讨论】:

  • 战争文件不包含缩小文件。
  • 您的意思是目标文件夹中的 WAR 文件包含缩小文件,而安装在本地 repo 中的相同文件不包含它?
  • 感谢您的回复。 WAR 文件不包含缩小文件。
  • 所以这很容易:您在本地存储库中没有缩小文件,因为您在目标 WAR 文件中没有它。您必须跟踪缩小文件的写入位置以及 WAR 文件的组装方式。最后,您必须配置其中一项:缩小文件应写入 WAR 程序集包含的文件夹或 WAR 程序集必须包含写入缩小文件的文件夹
  • 是的,我有一个文件夹。并且文件夹包含缩小文件。但是WAR没有缩小文件。我认为 WAR 是从 Source 中读取的。

标签: maven maven-plugin minify


【解决方案1】:

首先你必须删除:


crf

因为 package 阶段的 WAR 项目 maven-war-plugin 优先于其他插件 (http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Plugins) - WAR 在缩小之前构建。

顺便说一句,它解释了为什么 Maven 有阶段 prepare-package 而没有 post-package; package 中定义的所有内容实际上都是 post-package

这还不够,因为 maven-war-plugin 会覆盖缩小的文件。您必须将其配置为忽略原始 JS 文件,因为它们的缩小版本已经由 minify 插件准备好了 (Exclude source files from WAR package)

<plugin>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.1.1</version>
   <configuration>
       <packagingIncludes>WEB-INF/lib/urlrewritefilter-*.jar,WEB-INF/lib/xercesImpl-*.jar,WEB-INF/lib/io-*.jar,WEB-INF/lib/xtags-*.jar,**/*.xml,**/*.xsd,**/*.pdf,**/*.txt,**/*px,**/*dummyfile,**/*.properties,**/*.class,**/*.png,**/*.css,**/*.js,**/*.jsp,**/*.jspf,**/*.xsl,**/*.html,**/*.htm,**/*.vm,**/*.tld,**/*.gif,**/readme,**/*.zip,**/*.jpg,**/*.zul,**/*.zs,**/*.eot,**/*.svg,**/*.ttf,**/*.woff,**/*.swf
      </packagingIncludes>

<!--HERE **************** -->
      <warSourceExcludes>crf/js/*.js</warSourceExcludes>
<!--HERE **************** -->

     <archive>
         <manifest>
             <addClasspath>true</addClasspath>
             <classpathPrefix>lib/</classpathPrefix>
         </manifest>
       </archive>
   </configuration>
</plugin>

顺便说一句,您的 Maven 战争插件配置(packagingIncludes)表明您的项目一团糟。您应该考虑清理它,因为我的建议扩展了配置,任何进一步不必要的扩展都会导致整个配置难以理解

【讨论】:

  • 谢谢,为我解决了这个问题。重申我所做的更改: **/*.js 在 maven-war-plugin 中并将 jsEngine 更改为 'yuicompressor-maven-plugin' 和 prepare-package
猜你喜欢
  • 1970-01-01
  • 2017-05-13
  • 2014-08-10
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多