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);
+ });
+});