Skip to content

Commit

Permalink
don't reorder plugins inside pom profile
Browse files Browse the repository at this point in the history
  • Loading branch information
mshima committed Sep 20, 2024
1 parent 4cff830 commit db6bac7
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 4 deletions.
9 changes: 5 additions & 4 deletions generators/maven/internal/pom-sort.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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)) {
Expand All @@ -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;
};
102 changes: 102 additions & 0 deletions generators/maven/support/pom-file-sort.spec.ts
Original file line number Diff line number Diff line change
@@ -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 = `<?xml version="1.0" encoding="UTF-8"?>
<project>
<artifactId>test</artifactId>
<version>1.0</version>
<properties>
<test.version>1.0</test.version>
</properties>
</project>
`;
const sorted = sortPomFile(pomContent);
expect(sorted).toBe(pomContent);
});

it('should sort build.plugins', () => {
const pomContent = `<?xml version="1.0" encoding="UTF-8"?>
<project>
<build>
<plugins>
<plugin>
<groupId>b</groupId>
<artifactId>b</artifactId>
</plugin>
<plugin>
<groupId>a</groupId>
<artifactId>a</artifactId>
</plugin>
</plugins>
</build>
</project>
`;
const sorted = sortPomFile(pomContent);
expect(sorted).toBe(`<?xml version="1.0" encoding="UTF-8"?>
<project>
<build>
<plugins>
<plugin>
<groupId>a</groupId>
<artifactId>a</artifactId>
</plugin>
<plugin>
<groupId>b</groupId>
<artifactId>b</artifactId>
</plugin>
</plugins>
</build>
</project>
`);
});

it('should not sort profiles build.plugins', () => {
const pomContent = `<?xml version="1.0" encoding="UTF-8"?>
<project>
<profiles>
<profile>
<id>dev</id>
<build>
<plugins>
<plugin>
<groupId>b</groupId>
<artifactId>b</artifactId>
</plugin>
<plugin>
<groupId>a</groupId>
<artifactId>a</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
`;
const sorted = sortPomFile(pomContent);
expect(sorted).toBe(pomContent);
});
});

0 comments on commit db6bac7

Please sign in to comment.