fix(gradle): fix gradle undefined dependency target (#29943)

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
got this error:
```
 NX   Cannot read properties of undefined (reading '1')

TypeError: Cannot read properties of undefined (reading '1')
    at fileDataDepTarget (/Users/emily/code/tmp/spring-boot/.nx/installation/node_modules/nx/src/config/project-graph.js:13:18)
    at ProjectGraphBuilder.calculateTargetDepsFromFiles (/Users/emily/code/tmp/spring-boot/.nx/installation/node_modules/nx/src/project-graph/project-graph-builder.js:271:74)
```

this happens because the project in the dependency file is in format
like `:spring-boot-project:spring-boot-autoconfigure (*)`. need to take
out the text after space.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
This commit is contained in:
Emily Xiong 2025-02-11 17:14:58 -08:00 committed by GitHub
parent e77280f7d4
commit 7c5fcf3566
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 7565 additions and 10 deletions

View File

@ -44,14 +44,16 @@ export const createDependencies: CreateDependencies = async (
const targetProjectName = Object.values(context.projects).find(
(project) => project.root === targetProjectRoot
)?.name;
const dependency: RawProjectGraphDependency = {
source: projectName as string,
target: targetProjectName as string,
type: DependencyType.static,
sourceFile: gradleFile,
};
validateDependency(dependency, context);
dependencies.add(dependency);
if (targetProjectName) {
const dependency: RawProjectGraphDependency = {
source: projectName as string,
target: targetProjectName as string,
type: DependencyType.static,
sourceFile: gradleFile,
};
validateDependency(dependency, context);
dependencies.add(dependency);
}
});
}
gradleProjectToChildProjects.get(gradleProject)?.forEach((childProject) => {

File diff suppressed because it is too large Load Diff

View File

@ -73,4 +73,26 @@ describe('processGradleDependencies', () => {
const dependencies = processGradleDependencies(depFilePath);
expect(Array.from(dependencies)).toEqual([':utilities']);
});
it('should process gradle custom dependencies', () => {
const depFilePath = join(
__dirname,
'..',
'utils/__mocks__/gradle-custom-dependencies.txt'
);
const dependencies = processGradleDependencies(depFilePath);
expect(Array.from(dependencies)).toEqual([
':spring-boot-project:spring-boot-parent',
':spring-boot-project:spring-boot-actuator',
':spring-boot-project:spring-boot-actuator-autoconfigure',
':spring-boot-project:spring-boot-autoconfigure',
':spring-boot-project:spring-boot-docker-compose',
':spring-boot-project:spring-boot-tools:spring-boot-cli',
':spring-boot-project:spring-boot-tools:spring-boot-loader-tools',
':spring-boot-project:spring-boot-test',
':spring-boot-project:spring-boot-test-autoconfigure',
':spring-boot-project:spring-boot-testcontainers',
':spring-boot-project:spring-boot-devtools',
]);
});
});

View File

@ -424,10 +424,11 @@ export function processGradleDependencies(depsFile: string): Set<string> {
targetProjectName = dep
.substring('project '.length)
.replace(/ \(n\)$/, '')
.trim();
.trim()
.split(' ')?.[0];
} else if (dep.includes('-> project')) {
const [_, projectName] = dep.split('-> project');
targetProjectName = projectName.trim();
targetProjectName = projectName.trim().split(' ')?.[0];
}
if (targetProjectName) {
dependedProjects.add(targetProjectName);