IntelliJ - 修改 maven pom.xml 中的 <groupId> 以包含变量显示“禁止父定义中的属性”

问题描述 投票:0回答:1

我有同样的问题,我正在

  • Windows 11,
  • IntelliJ Ultimate 2024.1.2(终极版)和
  • maven 3.9.1.

我的项目由多个子项目组成,例如:

myApp
|- myApp.war
|- myApp.ear
|- myApp.service

在根(myApp)pom.xml中,我有如下属性部分:

<environment>env1</environment>

也在 myapp 根目录中,我设置了

groupId
,如下所示,pom.xml 不会显示红色波浪下划线,所以这里一切都很好:

<groupId>com.example.projName-${env}</groupId>  //this is fine

我可以对我的子项目工件 myApp.war、myApp.ear、myApp.service 做同样的事情,所以这里也很好。

但是,所有子组项目都必须引用父级项目,例如:

<parent>
    <groupId>com.example.projName-${environment}</groupId>  //get red squiggly underline
    <artifactId>myApp</artifactId>      
    <version>1.0.0</version>
</parent>

修改 <parent> 元素中的

groupId
会导致红色波浪下划线,当我将鼠标悬停在其上时,它会显示 父定义中的属性被禁止。

我这样修改groupId的原因是因为我希望将所有项目的模块推送到 Nexus 的公共位置,其名称由 projName-stagingprojName-qa 等定义。

但是,我仍然可以通过

mvn clean install
构建我的应用程序并使用
mvn deploy
部署到 Nexus 快照。

但是尝试部署到 Nexus 版本在 mvn 版本上失败:准备阶段如下:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:3.0.1:prepare (default-cli) on project myApp: Can't release project due to non released dependencies :
[ERROR]     com.example.myapp-${environment}:myapp:pom:1.0.1-SNAPSHOT
[ERROR] in project 'myapp-war' (com.example.myapp-env1:myapp-war:war:1.0.1-SNAPSHOT)
java intellij-idea pom.xml nexus maven-release-plugin
1个回答
0
投票

使用 Maven 配置文件进行特定于环境的构建。不要使用环境属性设置

groupId
,而是尝试使用配置文件进行特定于环境的配置。在根目录中定义配置文件
pom.xml
,如下所示:

<profiles>
    <profile>
        <id>env1</id>
        <properties>
            <group.name.suffix>-env1</group.name.suffix>
        </properties>
    </profile>
    <profile>
        <id>qa</id>
        <properties>
            <group.name.suffix>-qa</group.name.suffix>
        </properties>
    </profile>
</profiles>

然后修改您的

groupId
以包含后缀:

<groupId>com.example.projName${group.name.suffix}</groupId>

您可以在特定环境的构建过程中使用

mvn clean install -Penv1
-Pqa
激活配置文件,从而允许每个部署拥有基于
groupId
后缀的唯一 Nexus 路径。

通过在

pom.xml
中为每个环境定义配置文件(例如 env1qa),您可以动态设置
groupId
的后缀,确保您对 Nexus 的构建和部署可以引用正确的环境,而无需修改家长
groupId
.

© www.soinside.com 2019 - 2024. All rights reserved.