gpt4 book ai didi

Maven 和配置文件 : Using the same plugin in two different profiles and have both active at the same time

转载 作者:行者123 更新时间:2023-12-04 18:36:57 25 4
gpt4 key购买 nike

我们使用 frontend-maven-plugin在我们的构建中使用 grunt 和 bower。使用前端 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 文件的情况下部署 war 。这将帮助他们进行调试。为此,我们只需删除 grunt-build此插件配置中的执行部分。

我想使用配置文件来做到这一点。我可以有一个名为 development 的个人资料这允许开发人员在没有最后一部分的情况下进行构建。我可以简单地复制并粘贴 pom.xml 的这一部分文件,删除最后一次执行,并将其放入单独的配置文件中。全部做完。

但是,有一句古老的编程格言:不要重复自己。我会在我的 pom.xml 中复制大约 50 行代码。 .

我想做的是有办法执行前三个执行,只有在这不是开发构建时才执行第四个。我也会在这方面做一些其他的小 Action 。例如,我将不得不复制 JavaScript 本身而不是咕哝的结果。但是,这很容易做到并且不会重复代码。

这将导致重复代码,因为我必须定义 frontend-maven-plugin有两种配置。一次为 development profile 和一次用于标准版本构建。据我所知,我不能说,运行 frontend-maven-plugin 的这个配置,如果这不是开发版本,请运行 frontend-maven-plugin 的这个实例这只会做咕噜咕噜的东西。

有没有办法在 pom.xm 中定义相同的插件两次? ,并让 Maven 以正确的顺序运行这两个实例?

最佳答案

让我引用 the Maven forum :

My takeaway was that if one just jumps on profiles as the solution to every conditional situation, the build will grow a second head like a hydra in a bad horror flick and you'll really regret it.

The point is that profiles are often an expedient substitute for using Maven correctly. They should always be considered "last resort" unless you know what you are getting yourself into.

In my situation, [...]. Profiles work great for that, but I can see exactly where the hydra head fits on the beast now and don't intend on doing anything more with them unless absolutely necessary.


我已经有了个人资料的经验。我赞同这个观点。
Maven 的 POM 具有声明性。这意味着您无需定义在构建期间要做什么,而是声明您的项目的外观(通过 P roject O bject M odel)。有了这个,Maven 就知道在构建过程中该做什么以及何时该做。通过使用 XML,它也是严格的自上而下的分层结构。与 Ant 或 Gradle 等程序化或脚本化构建定义(注意声明与定义)相比,我认为所有这些都是一大优势(不是唯一的,还有更多)。使用 Maven 配置文件,您可以从“侧面”向这个(分层的)声明“注入(inject)”一些东西。当然,你可以这样做,但你必须知道你在做什么,并且在你这样做之前你应该彻底考虑过。
从概念的角度来看,您有两个项目有大部分共同点。这就是 Maven 的 POM 层次结构及其继承发挥作用的地方:
product ... parent for all projects below
+- 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
and redirects all of <build>
<outputDirectory> <testOutputDirectory>
<sourceDirectory> <scriptSourceDirectory> <testSourceDirectory>
<resources> <testResources>
to ../dev/<all of the dirs above>
The BaseBuild Element Set , ResourcesThe Build Element Set在要重定向的所有构建目录的 POM 引用中。
Maven include another pom for plugin configuration :

The only correct answer is to use inheritance.


我也赞同这一点。
不过,如果您选择个人资料,我建议您将其命名为 dev而不是 development .您的开发人员将永远感激不尽。 :)

关于Maven 和配置文件 : Using the same plugin in two different profiles and have both active at the same time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33289013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com