我们使用frontend-maven-plugin在我们的构建中使用grunt和bower。使用Frontend Maven插件,我可以在本地安装NPM,使用Bower下载Java库,并运行Grunt来优化和混淆我的代码。
像这样简化:
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>0.0.24</version>
<executions>
<execution>
<id>install node and npm</id>
<goals> <goal>install-node-and-npm</goal> </goals>
...
</execution>
<execution>
<id>npm-install</id>
<goals> <goal>npm</goal> </goals>
...
</execution>
<execution>
<id>bower-install</id>
<goals> <goal>bower</goal> </goals>
...
</execution>
<execution>
<id>grunt-build</id>
<goals> <goal>grunt</goal> </goals>
...
</execution>
</executions>
</plugin>
请注意,最后一次执行是grunt-build,这是JavaScript文件连接在一起,优化(返回,注释和其他删除的东西)和模糊处理的地方。
这适用于版本。但是,开发人员希望在没有JavaScript文件连接,优化和混淆的情况下部署战争。这将有助于他们进行调试。为此,我们只需从此插件的配置中删除grunt-build
执行部分。
我想使用配置文件来执行此操作。我可以有一个名为development
的配置文件,允许开发人员在没有最后一节的情况下进行构建。我可以简单地复制并粘贴pom.xml
文件的这一部分,删除最后一次执行,并将其放入单独的配置文件中。一切都完成了。
然而,的旧编程格言不会重复。我将在pom.xml
中复制大约50行代码。
我想要做的是有一种方法来执行前三次执行,并且只有在不是开发构建时才执行第四次执行。我也会在这里有一些其他的咬合和褶皱。例如,我必须复制JavaScripts本身,而不是结果。但是,这很容易做到而且不会重复代码。
这会导致重复的代码,因为我必须使用两种配置来定义frontend-maven-plugin
。一次为development
个人资料,一次为标准版本。据我所知,我不能说,运行frontend-maven-plugin
的这种配置,如果这不是开发构建,运行frontend-maven-plugin
的这个实例,它只会做咕噜声的东西
有没有办法在pom.xm
中两次定义同一个插件,并让Maven以正确的顺序运行这两个实例?
答案 0 :(得分:3)
您很幸运,该插件的IEnumerable
目标定义了skip
属性,因此您只需在自定义配置文件中将此属性设置为grunt
。
因此,您需要创建一个配置文件true
,将自定义属性development
设置为skipGrunt
,并将默认配置文件设置为true
。
然后,在false
目标的插件配置中,您可以添加
grunt
这句话可以更加通用:当您需要跳过插件的特定执行时, 一般一个自定义<configuration>
<skip>${skipGrunt}</skip>
<!-- rest of configuration -->
</configuration>
属性,您可以将其设置为{ {1}}。
答案 1 :(得分:3)
让我引用the Maven forum:
我的看法是,如果一个人只是跳过配置文件作为解决每个条件情况的解决方案,那么构建将会像恐怖电影中的水弹一样成长为第二个头,你会真的后悔。
关键是配置文件通常是正确使用Maven的权宜之计。除非你知道自己要做什么,否则它们应该永远被视为“最后的手段”。
在我的情况下,[...]配置文件非常适用于此,但我现在可以确切地看到九头蛇现在适合野兽的位置,除非绝对必要,否则不打算再用它们做任何事情。
我已经使用了个人资料。我是第二个观点。
从概念的角度来看,你有两个项目,它们的大部分内容都是相同的。这就是Maven的POM层次结构及其继承发挥作用的地方:
product ... parent POM
+- pom.xml ... contains build steps apart from Grunt and all other declarations
+- dev
| +- pom.xml ... almost empty since everything's inherited from parent
| +- ... sources, resources, etc. ...
+- release
+- pom.xml ... contains Grunt build step only, everything else's inherited from parent
redirecting <build>/<[[test]source|resource>/]|
[[test]output|testresource>/]directory> to ../dev/...
有关要重定向的所有构建目录,请参阅 POM参考中的The BaseBuild Element Set,Resources和The Build Element Set。
请参阅Maven include another pom for plugin configuration:
唯一正确的答案是使用继承。
我也是第二个。
如果您使用个人资料,我建议将其称为dev
而不是development
。你的开发人员将永远感恩。 :)