You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置nx release以适配包含Java和Node.js应用的NX Monorepo?

解决NX Monorepo中Java项目的Release配置问题

NX Release默认是为npm生态设计的,依赖package.json管理版本,而Java项目用pom.xml,所以需要调整配置来实现统一发布。以下是几种可行方案:

方案1:统一版本号,拆分发布执行逻辑

如果只想统一仓库版本号,同时分别处理前端和Java的发布流程:

  1. 修改nx.json的release配置,仅包含前端项目,指定根目录package.json作为版本源:
{
  "release": {
    "projects": ["apps/node/**"],
    "version": {
      "source": "root"
    }
  }
}
  1. 执行NX Release更新版本号:
nx release patch --first-release

这会同步更新根目录和所有前端项目的package.json版本。
3. 同步Java项目版本:写一个简单脚本(Node.js/Shell均可),读取根package.json的version字段,批量替换所有Java项目pom.xml里的版本号。
4. 单独执行Java项目的Maven发布:

nx run-many -t deploy --projects=apps/java/**

方案2:给Java项目添加极简package.json适配NX Release

给每个Java项目添加仅用于版本管理的package.json,配合NX配置执行Java发布任务:

  1. 在每个Java项目根目录创建package.json,内容如下:
{
  "name": "my-java-service",
  "version": "1.0.0",
  "scripts": {
    "release": "mvn deploy"
  }
}
  1. 修改nx.json的release配置,指定Java项目的发布命令:
{
  "release": {
    "projects": ["apps/**"],
    "projectsConfigurations": {
      "apps/java/**": {
        "packageRoot": ".",
        "releaseCommand": "npm run release"
      }
    }
  }
}
  1. 可选:添加版本同步脚本,在发布前把package.json的版本同步到pom.xml:
{
  "scripts": {
    "prerelease": "node ./sync-version.js",
    "release": "mvn deploy"
  }
}

sync-version.js示例:

const fs = require('fs');
const pkg = require('./package.json');
const pomContent = fs.readFileSync('./pom.xml', 'utf8')
  .replace(/<version>.*<\/version>/, `<version>${pkg.version}</version>`);

fs.writeFileSync('./pom.xml', pomContent);
  1. 执行NX Release时,会自动更新所有项目版本号,并调用Java项目的release命令完成Maven发布。

方案3:自定义NX Release生命周期钩子

利用NX Release的hooks,在版本更新后统一处理Java项目的发布:

  1. 修改nx.json的release配置,添加postVersion钩子:
{
  "release": {
    "projects": ["apps/node/**"],
    "version": {
      "source": "root"
    },
    "hooks": {
      "postVersion": "node ./scripts/sync-java-versions.js && nx run-many -t deploy --projects=apps/java/**"
    }
  }
}
  1. 编写scripts/sync-java-versions.js脚本,实现根版本到Java项目pom.xml的同步(逻辑同方案1的脚本)。
  2. 执行NX Release时,会先完成前端版本更新,再自动执行钩子脚本同步Java版本并发布。

内容的提问来源于stack exchange,提问作者vikingsteve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:33:26