我正在开发一个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个人资料有关吗?
答案 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>