fix(gradle): fix child project deps (#27643)
## Current Behavior <!-- This is the behavior we have today --> When the name of a gradle project is overwritten by a different plugin, the plugin throws an error creating dependencies. ## Expected Behavior <!-- This is the behavior we should expect with the changes in this PR --> The plugin uses the `CreateDependenciesContext` to get the name of a project at the project root and uses that to create the dependency. ## Related Issue(s) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes #
This commit is contained in:
parent
f02e2fc76e
commit
036e5fcf3e
@ -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([
|
||||
|
||||
@ -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<string, string>,
|
||||
gradleProjectNameToProjectRoot: Map<string, string>,
|
||||
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,
|
||||
|
||||
@ -34,6 +34,9 @@ describe('@nx/gradle/plugin', () => {
|
||||
['proj', new Map([['test', 'Verification']])],
|
||||
]),
|
||||
gradleProjectToProjectName: new Map<string, string>([['proj', 'proj']]),
|
||||
gradleProjectNameToProjectRootMap: new Map<string, string>([
|
||||
['proj', 'proj'],
|
||||
]),
|
||||
gradleProjectToChildProjects: new Map<string, string[]>(),
|
||||
};
|
||||
cwd = process.cwd();
|
||||
@ -136,6 +139,9 @@ describe('@nx/gradle/plugin', () => {
|
||||
['proj', new Map([['test', 'Verification']])],
|
||||
]),
|
||||
gradleProjectToProjectName: new Map<string, string>([['proj', 'proj']]),
|
||||
gradleProjectNameToProjectRootMap: new Map<string, string>([
|
||||
['proj', 'proj'],
|
||||
]),
|
||||
gradleProjectToChildProjects: new Map<string, string[]>(),
|
||||
};
|
||||
await tempFs.createFiles({
|
||||
@ -218,6 +224,9 @@ describe('@nx/gradle/plugin', () => {
|
||||
['proj', new Map([['test', 'Test']])],
|
||||
]),
|
||||
gradleProjectToProjectName: new Map<string, string>([['proj', 'proj']]),
|
||||
gradleProjectNameToProjectRootMap: new Map<string, string>([
|
||||
['proj', 'proj'],
|
||||
]),
|
||||
gradleProjectToChildProjects: new Map<string, string[]>(),
|
||||
};
|
||||
await tempFs.createFiles({
|
||||
|
||||
@ -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<string, Map<string, string>>;
|
||||
gradleProjectToTasksTypeMap: Map<string, Map<string, string>>;
|
||||
gradleProjectToProjectName: Map<string, string>;
|
||||
gradleProjectNameToProjectRootMap: Map<string, string>;
|
||||
gradleProjectToChildProjects: Map<string, string[]>;
|
||||
}
|
||||
|
||||
@ -125,6 +127,7 @@ export function processProjectReports(
|
||||
*/
|
||||
const gradleProjectToTasksTypeMap = new Map<string, Map<string, string>>();
|
||||
const gradleProjectToProjectName = new Map<string, string>();
|
||||
const gradleProjectNameToProjectRootMap = new Map<string, string>();
|
||||
/**
|
||||
* 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,
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user