diff --git a/generators/maven/internal/pom-sort.ts b/generators/maven/internal/pom-sort.ts index a3d9e372da7c..17691db2f196 100644 --- a/generators/maven/internal/pom-sort.ts +++ b/generators/maven/internal/pom-sort.ts @@ -126,7 +126,8 @@ const sortArtifacts = (artifacts: MavenDependency[]) => const sortProfiles = (profiles: MavenProfile[]) => profiles.sort((a, b) => a.id?.localeCompare(b.id) ?? 1); -const sortProjectLike = (projectLike: any): any => { +const sortProjectLike = (projectLike: any, options: { sortPlugins?: boolean } = {}): any => { + const { sortPlugins = true } = options; projectLike = sortKeys(projectLike, { compare: comparator(rootAndProfileOrder) }); if (projectLike.properties) { projectLike.properties = sortProperties(projectLike.properties); @@ -140,7 +141,7 @@ const sortProjectLike = (projectLike: any): any => { if (projectLike.build) { projectLike.build = sortSection(projectLike.build); - if (Array.isArray(projectLike.build.plugins?.plugin)) { + if (sortPlugins && Array.isArray(projectLike.build.plugins?.plugin)) { projectLike.build.plugins.plugin = sortArtifacts(projectLike.build.plugins.plugin); } if (Array.isArray(projectLike.build.pluginManagement?.plugins?.plugin)) { @@ -153,9 +154,9 @@ const sortProjectLike = (projectLike: any): any => { export const sortPomProject = (project: any): any => { project = sortProjectLike(project); if (Array.isArray(project.profiles?.profile)) { - project.profiles.profile = sortProfiles(project.profiles.profile.map(profile => sortProjectLike(profile))); + project.profiles.profile = sortProfiles(project.profiles.profile.map(profile => sortProjectLike(profile, { sortPlugins: false }))); } else if (project.profiles?.profile) { - project.profiles.profile = sortProjectLike(project.profiles.profile); + project.profiles.profile = sortProjectLike(project.profiles.profile, { sortPlugins: false }); } return project; }; diff --git a/generators/maven/support/pom-file-sort.spec.ts b/generators/maven/support/pom-file-sort.spec.ts new file mode 100644 index 000000000000..e482073c2c44 --- /dev/null +++ b/generators/maven/support/pom-file-sort.spec.ts @@ -0,0 +1,102 @@ +/** + * Copyright 2013-2024 the original author or authors from the JHipster project. + * + * This file is part of the JHipster project, see https://www.jhipster.tech/ + * for more information. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { describe, expect } from 'esmocha'; +import { sortPomFile } from './pom-file-sort.js'; + +describe('sortPomProject', () => { + it('should sort a pom file', () => { + const pomContent = ` + + test + 1.0 + + + 1.0 + + +`; + const sorted = sortPomFile(pomContent); + expect(sorted).toBe(pomContent); + }); + + it('should sort build.plugins', () => { + const pomContent = ` + + + + + + b + b + + + a + a + + + + +`; + const sorted = sortPomFile(pomContent); + expect(sorted).toBe(` + + + + + + a + a + + + b + b + + + + +`); + }); + + it('should not sort profiles build.plugins', () => { + const pomContent = ` + + + + + dev + + + + b + b + + + a + a + + + + + + +`; + const sorted = sortPomFile(pomContent); + expect(sorted).toBe(pomContent); + }); +});