使用Maven配置文件在缩小/未压缩的JS之间切换?

时间:2014-10-20 20:31:17

标签: jsp maven minify maven-profiles

我正在开发一个Java Web应用程序,它使用Maven进行构建,并且有很多JavaScript。

我想要做的是基本上在我的JSP文件中有这个:

<c:choose>
    <c:when test="PRODUCTION">
        <script type="text/javascript" src="/path/to/app.min.js"></script>
    </c:when>
    <c:otherwise>
        <script type="text/javascript" src="/path/to/script1.js"></script>
        <script type="text/javascript" src="/path/to/script2.js"></script>
    </c:otherwise
</c:choose>

这可能与Maven个人资料有关吗?

2 个答案:

答案 0 :(得分:6)

看看maven resource filtering。您可以使用它来覆盖资源文件中的属性及其实际值。

1)使用包含环境名称的属性文件。说 environment.properties ,其内容如下。

environment.name=${environment.name}

现在在你的pom文件中使用以下内容

<properties>
    <environment.name>TEST</environment.name>
</properties>

<profiles>
    <profile>
        <id>PROD</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <environment.name>PROD</environment.name>
        </properties>
    </profile>
</profiles>

并在您的pom中指定资源过滤

  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>

如果您使用此配置文件运行构建,

mvn clean install -P PROD

environment.properties将被处理为

environment.name=PROD

如果您不使用此个人资料

mvn clean install

它将被处理为

environment.name=TEST

现在,在运行时,从 environment.properties 中读取 environment.name 属性,并根据属性值使用相应的.js文件。

OR

2)如果您不想阅读属性文件,可以过滤jsp本身。

<properties>
    <js.suffix></js.suffix>
</properties>

<profiles>
    <profile>
        <id>PROD</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <js.suffix>min.</js.suffix>
        </properties>
    </profile>
</profiles>

并设置网络资源过滤

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <webResources>
                    <resource>
                        <directory>src/main/webapp</directory>
                        <filtering>true</filtering>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
    </plugins>
</build>

并在你的jsp中添加这类东西

 <script type="text/javascript" src="/path/to/app.${js.suffix}js"></script>

(假设未压缩的是app.js,压缩的是app.min.js)

答案 1 :(得分:2)

我的解决方案有点不同。我使用minify-maven-plugin并在开发中使用它创建一个合并但未缩小的app.js,当我在制作时,我用它来创建一个缩小的文件。我将它们都命名为app.js,因此我不必使用Maven更改我的JSP文件。

例如:

<!-- Resource minification -->
<plugin>
  <groupId>com.samaxes.maven</groupId>
  <artifactId>minify-maven-plugin</artifactId>
  <version>1.7.2</version>
  <executions>
    <!-- JavaScript -->
    <execution>
      <id>minify-js</id>
          <phase>generate-sources</phase>
      <configuration>
        <charset>utf-8</charset>
        <skipMerge>false</skipMerge>
        <skipMinify>${javascript.skipMinify}</skipMinify>
        <nosuffix>true</nosuffix>
        <webappSourceDir>${project.basedir}/src/main/webapp</webappSourceDir>
        <jsSourceDir>assets/js</jsSourceDir>
        <jsSourceIncludes>
          <jsSourceInclude>*.js</jsSourceInclude>
        </jsSourceIncludes>
        <jsFinalFile>app.js</jsFinalFile>
      </configuration>
      <goals>
        <goal>minify</goal>
      </goals>
    </execution>
  </executions>
</plugin>

然后我使用Maven配置文件切换${javascript.skipMinify}属性,例如:

<profile>
  <id>development</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <properties>
    <javascript.skipMinify>true</javascript.skipMinify>
  </properties>
</profile>
<profile>
  <id>production</id>
  <properties>
    <javascript.skipMinify>false</javascript.skipMinify>
  </properties>
</profile>