Maven 2 Maven配置文件-根据包装激活配置文件
我有一个POM,它声明了我的项目中常见的web应用程序内容。我将其用作所有web应用程序的父级 是否只有在包装为war时才能激活配置文件?我已经尝试过属性方法,但它不起作用(因为它不是系统/环境属性) 由于构建失败,我可以在安装POM时简单地禁用该配置文件,但我希望它本身更智能Maven 2 Maven配置文件-根据包装激活配置文件,maven-2,profiles,Maven 2,Profiles,我有一个POM,它声明了我的项目中常见的web应用程序内容。我将其用作所有web应用程序的父级 是否只有在包装为war时才能激活配置文件?我已经尝试过属性方法,但它不起作用(因为它不是系统/环境属性) 由于构建失败,我可以在安装POM时简单地禁用该配置文件,但我希望它本身更智能 Walter我知道这并不是直接回答你的问题,但解决此类问题的通常方法是使用专门化(与类一样) 因此,你有你的大师与所有常见的行为 MasterWarPom扩展了MasterPom(是它的父级),并将任何“打包就是战争”的
Walter我知道这并不是直接回答你的问题,但解决此类问题的通常方法是使用专门化(与类一样) 因此,你有你的大师与所有常见的行为 MasterWarPom扩展了MasterPom(是它的父级),并将任何“打包就是战争”的专业化放在这里 同样地,你也可以拥有大师贾波姆,等等
这样可以很好地分割差异。没有干净的方法可以做到这一点,父模块无法知道子模块的包装。(非干净的解决方案包括创建一个插件来解析子模块的pom等)对于这些排序场景,我能想到的最好方法就是使用基于文件的激活触发器。 我的父母波姆
<profile>
<id>maven-war-project</id>
<activation>
<file><!-- add a file named .maven-war-project-marker to webapp projects to activate this profile -->
<exists>${basedir}/.maven-war-project-marker</exists>
</file>
</activation>
<build>
<plugins>
<!-- configuration for webapp plugins here -->
</plugins>
</build>
马文战争项目
${basedir}/.maven war项目标记
从该父级继承的webapp项目包含一个名为
“.maven war项目标记”
这将激活配置文件
这看起来相当迟钝,但工作相当可靠
-如果由其他人或系统进行构建,则使用属性激活是不可靠的,
-从特定于类型的父级继承对我来说有点麻烦,因为祖父母pom相对频繁地更改版本,因为它用于定义公共依赖项的“标准”或首选版本,这反过来需要所有特定于类型的父级的相应版本,除祖父母外没有任何更改版本您只需检查src/main/webapp是否存在。使用Maven标准目录布局的每个web应用程序都应该包含此文件夹。因此可以避免不必要的虚拟文件
<profile>
<id>custom-profile-eclipse-project-generation-webapp</id>
<activation>
<file>
<exists>${basedir}/src/main/webapp</exists>
</file>
</activation>
<build>
</build>
</profile>
自定义概要文件eclipse项目生成webapp
${basedir}/src/main/webapp
更准确地说,您还可以检查${basedir}/src/main/webapp/WEB-INF/WEB.xml是否存在。这将明确确定一个战争项目
对于我自己,我在我的通用超级pom中使用这个配置来为不同的项目类型配置maven eclipse插件。在我们的组织中,在相同的项目类型上获得同质的eclipse配置非常方便,特别是当开发人员直接在多模块项目上运行eclipse:eclipse时。尝试这种方法吗
mvn包-Dmaven.test.skip=true-Dwar
<project ×××××>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>××××</groupId>
<artifactId>×××××</artifactId>
<version>×××××</version>
<relativePath>../../</relativePath>
</parent>
<artifactId>×××××</artifactId>
<name>${project.artifactId}-${project.version}</name>
<description>${project.artifactId}-${project.version}</description>
<properties>
<packaging.type>jar</packaging.type>
</properties>
<profiles>
<profile>
<activation>
<property>
<name>war</name>
</property>
</activation>
<properties>
<packaging.type>war</packaging.type>
</properties>
<build>
<finalName>ROOT</finalName>
</build>
</profile>
</profiles>
<packaging>${packaging.type}</packaging>
<dependencies>
<dependency>
... ...
</dependency>
... ...
</dependencies>
4.0.0
××××
×××××
×××××
../../
×××××
${project.artifactId}-${project.version}
${project.artifactId}-${project.version}
罐子
战争
战争
根
${packaging.type}
... ...
... ...
这正是我正在做的。这是我的抽象web应用程序pom,问题是,关键生成部分希望在包阶段运行。我在安装/部署pom时要做的是禁用该配置文件。为什么一个简单的激活不能做到?例如,在父pom中,您可以说,当project.packaging=war或jar时激活。当子级的打包覆盖父级的pom打包时,配置文件被激活。有可能编写这样一个激活吗?我很确定这不是配置文件继承的工作方式。父级将打开或不打开配置文件,但子级将不会继承打开逻辑,只继承配置文件中的内容。这种类型的高级配置文件激活尚未实现!欢迎使用StackOverflow——您可以通过解释它如何回答所问的问题来补充您的答案吗?外部化打包类型会使Maven配置变得复杂,这是不必要的。或者检查仅存在于具有父/聚合pom的目录中的文件。这样它就更健壮了。例如:某些\u文件\u存在\u仅\u在\u目录\u中\u与\u聚合\u POM