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