diff --git a/packages/gradle/src/plugin/dependencies.spec.ts b/packages/gradle/src/plugin/dependencies.spec.ts index f1fff883a9..bd50d496a8 100644 --- a/packages/gradle/src/plugin/dependencies.spec.ts +++ b/packages/gradle/src/plugin/dependencies.spec.ts @@ -17,12 +17,21 @@ describe('processGradleDependencies', () => { processGradleDependencies( depFilePath, new Map([ - [':my-utils:number-utils', 'number-utils'], - [':my-utils:string-utils', 'string-utils'], + [':my-utils:number-utils', 'utilities/number-utils'], + [':my-utils:string-utils', 'utilities/string-utils'], ]), 'app', 'app', - {} as any, + { + projects: { + 'utilities/number-utils': { + name: 'number-utils', + }, + 'utilities/string-utils': { + name: 'string-utils', + }, + }, + } as any, dependencies ); expect(Array.from(dependencies)).toEqual([ @@ -51,13 +60,25 @@ describe('processGradleDependencies', () => { processGradleDependencies( depFilePath, new Map([ - [':my-utils:number-utils', 'number-utils'], - [':my-utils:string-utils', 'string-utils'], + [':my-utils:number-utils', 'utilities/number-utils'], + [':my-utils:string-utils', 'utilities/string-utils'], [':utilities', 'utilities'], ]), 'app', 'app', - {} as any, + { + projects: { + 'utilities/number-utils': { + name: 'number-utils', + }, + 'utilities/string-utils': { + name: 'string-utils', + }, + utilities: { + name: 'utilities', + }, + }, + } as any, dependencies ); expect(Array.from(dependencies)).toEqual([ diff --git a/packages/gradle/src/plugin/dependencies.ts b/packages/gradle/src/plugin/dependencies.ts index 42e0d36d52..bfeb616e3b 100644 --- a/packages/gradle/src/plugin/dependencies.ts +++ b/packages/gradle/src/plugin/dependencies.ts @@ -7,7 +7,7 @@ import { validateDependency, } from '@nx/devkit'; import { readFileSync } from 'node:fs'; -import { basename } from 'node:path'; +import { basename, dirname } from 'node:path'; import { GRADLE_BUILD_FILES, @@ -27,7 +27,7 @@ export const createDependencies: CreateDependencies = async ( const gradleDependenciesStart = performance.mark('gradleDependencies:start'); const { gradleFileToGradleProjectMap, - gradleProjectToProjectName, + gradleProjectNameToProjectRootMap, buildFileToDepsMap, gradleProjectToChildProjects, } = getCurrentGradleReport(); @@ -35,13 +35,13 @@ export const createDependencies: CreateDependencies = async ( for (const gradleFile of gradleFiles) { const gradleProject = gradleFileToGradleProjectMap.get(gradleFile); - const projectName = gradleProjectToProjectName.get(gradleProject); + const projectName = context.projects[dirname(gradleFile)].name; const depsFile = buildFileToDepsMap.get(gradleFile); if (projectName && depsFile) { processGradleDependencies( depsFile, - gradleProjectToProjectName, + gradleProjectNameToProjectRootMap, projectName, gradleFile, context, @@ -88,7 +88,7 @@ function findGradleFiles(fileMap: FileMap): string[] { export function processGradleDependencies( depsFile: string, - gradleProjectToProjectName: Map, + gradleProjectNameToProjectRoot: Map, sourceProjectName: string, gradleFile: string, context: CreateDependenciesContext, @@ -122,9 +122,10 @@ export function processGradleDependencies( const [_, projectName] = dep.split('-> project'); gradleProjectName = projectName.trim(); } - const target = gradleProjectToProjectName.get( + const targetProjectRoot = gradleProjectNameToProjectRoot.get( gradleProjectName ) as string; + const target = context.projects[targetProjectRoot]?.name; if (target) { const dependency: RawProjectGraphDependency = { source: sourceProjectName, diff --git a/packages/gradle/src/plugin/nodes.spec.ts b/packages/gradle/src/plugin/nodes.spec.ts index 60eb322861..dc81a797da 100644 --- a/packages/gradle/src/plugin/nodes.spec.ts +++ b/packages/gradle/src/plugin/nodes.spec.ts @@ -34,6 +34,9 @@ describe('@nx/gradle/plugin', () => { ['proj', new Map([['test', 'Verification']])], ]), gradleProjectToProjectName: new Map([['proj', 'proj']]), + gradleProjectNameToProjectRootMap: new Map([ + ['proj', 'proj'], + ]), gradleProjectToChildProjects: new Map(), }; cwd = process.cwd(); @@ -136,6 +139,9 @@ describe('@nx/gradle/plugin', () => { ['proj', new Map([['test', 'Verification']])], ]), gradleProjectToProjectName: new Map([['proj', 'proj']]), + gradleProjectNameToProjectRootMap: new Map([ + ['proj', 'proj'], + ]), gradleProjectToChildProjects: new Map(), }; await tempFs.createFiles({ @@ -218,6 +224,9 @@ describe('@nx/gradle/plugin', () => { ['proj', new Map([['test', 'Test']])], ]), gradleProjectToProjectName: new Map([['proj', 'proj']]), + gradleProjectNameToProjectRootMap: new Map([ + ['proj', 'proj'], + ]), gradleProjectToChildProjects: new Map(), }; await tempFs.createFiles({ diff --git a/packages/gradle/src/utils/get-gradle-report.ts b/packages/gradle/src/utils/get-gradle-report.ts index 81a885291d..d823ca8731 100644 --- a/packages/gradle/src/utils/get-gradle-report.ts +++ b/packages/gradle/src/utils/get-gradle-report.ts @@ -11,6 +11,7 @@ import { combineGlobPatterns } from 'nx/src/utils/globs'; import { execGradleAsync } from './exec-gradle'; import { hashWithWorkspaceContext } from 'nx/src/utils/workspace-context'; +import { dirname } from 'path'; export const fileSeparator = process.platform.startsWith('win') ? 'file:///' @@ -26,6 +27,7 @@ export interface GradleReport { gradleFileToOutputDirsMap: Map>; gradleProjectToTasksTypeMap: Map>; gradleProjectToProjectName: Map; + gradleProjectNameToProjectRootMap: Map; gradleProjectToChildProjects: Map; } @@ -125,6 +127,7 @@ export function processProjectReports( */ const gradleProjectToTasksTypeMap = new Map>(); const gradleProjectToProjectName = new Map(); + const gradleProjectNameToProjectRootMap = new Map(); /** * Map of buildFile to dependencies report path */ @@ -225,6 +228,7 @@ export function processProjectReports( gradleFileToOutputDirsMap.set(buildFile, outputDirMap); gradleFileToGradleProjectMap.set(buildFile, gradleProject); gradleProjectToProjectName.set(gradleProject, projectName); + gradleProjectNameToProjectRootMap.set(projectName, dirname(buildFile)); } if (line.endsWith('taskReport')) { const gradleProject = line.substring( @@ -276,6 +280,7 @@ export function processProjectReports( gradleFileToOutputDirsMap, gradleProjectToTasksTypeMap, gradleProjectToProjectName, + gradleProjectNameToProjectRootMap, gradleProjectToChildProjects, }; }