4

我想将多个 js 文件聚合/组装成一个,而不使用 maven 插件缩小或混淆它们。我已经在使用 yui 插件将一些 js 文件混淆为一个:

       <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>yuicompressor-maven-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <id>obfuscate</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>compress</goal>
                    </goals>
                    <configuration>
                        <nosuffix>true</nosuffix>
                        <linebreakpos>-1</linebreakpos>
                        <aggregations>
                            <aggregation>
                                <removeIncluded>true</removeIncluded>
                                <insertNewLine>false</insertNewLine>
                                <output>${project.build.directory}/${project.build.finalName}/all.js</output>
                                <includes>
                                    <include>**/*.js</include>
                                </includes>
                                <excludes>
                                    <exclude>**/include/*.js</exclude>
                                </excludes>
                            </aggregation>
                        </aggregations>
                    </configuration>
                </execution>
            </executions>
        </plugin>

现在我希望在 allForDev.js 文件中聚合相同的 js 文件,而无需缩小或混淆。目标是拥有一个用于开发的文件和一个用于生产的文件。在开发人员工具中调试时查看整个脚本会很有用。如果我找不到这样做的方法,我将被迫放置很多脚本标签来加载所有这些脚本(这不是世界末日:),但我想以更清洁的方式来做)。

我可以看到 assemble 插件具有以下格式:

zip tar.gz tar.bz2 jar dir war 和 ArchiveManager 配置的任何其他格式

有没有办法可以使用 assemble maven 插件来做到这一点?尽管我看起来有很多示例来创建 zips jars 和 wars,但没有一个与我想要做的相匹配。还是我错过了什么?

我可以使用另一个插件吗?

作为旁注,我尝试使用 yui 插件的第二次执行来创建第二个 js 文件,但我没有创建 2 个文件的运气。我还尝试提供 2 个 yui 插件,但再次没有运气。我认为这也不可能。

干杯,
暴君

4

2 回答 2

0

答案就在 wro4j 库中。有关更精确的设置,请参见:

Javascript 和 CSS 文件在 Maven 构建中组合,无需压缩、缩小等

于 2013-01-04T09:22:58.497 回答
0

如果您不想像我一样使用 wro4j 插件(来自@despot 的回答)并想快速制作原型,您实际上可以使用maven-antrun-plugin具有类似配置的旧插件,如下所示:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <configuration>
                <target>
                    <property name="root" location=""/>
                    <property name="jsRoot" location="${root}/src/main/webapp/js"/>
                    <property name="jsAggregated" location="${root}/src/main/webapp/all.js"/>
                    <echo message="Aggregating js files from ${jsRoot} into ${jsAggregated}"/>
                    <concat destfile="${jsAggregated}" encoding="UTF-8" >
                        <fileset dir="${jsRoot}" includes="*.*"/>
                        <filelist dir="${jsRoot}/.." files="client.js"/>
                    </concat>
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

这一个连接文件夹中的所有文件<module>/src/main/webapp/js/*.*(但不是子文件夹中的文件)。然后它添加client.js到最后以确保所有东西都可用(AFAIK<fileset>有未定义的顺序)。

生成的连接文件然后驻留在<module>/src/main/webapp/all.js.

我知道 Maven 阶段、路径和其他东西可能不是“正确的”——这只是一个简单的例子,展示了另一种非侵入性的方法。

于 2016-12-19T20:50:18.297 回答