mirror of https://github.com/apache/maven.git
[MNG-8188] Profile properties are not interpolated (#1634)
Restore of uninterpolated things did "too much", we need to restore activations only. Maven4 is not affected, manually checked using reproducer. --- https://issues.apache.org/jira/browse/MNG-8188
This commit is contained in:
parent
ecd577b363
commit
1a787b0357
|
@ -36,6 +36,7 @@ import java.util.Objects;
|
|||
import java.util.Optional;
|
||||
import java.util.Properties;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
||||
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
|
||||
|
@ -764,7 +765,7 @@ public class DefaultModelBuilder implements ModelBuilder {
|
|||
|
||||
private Model interpolateModel(Model model, ModelBuildingRequest request, ModelProblemCollector problems) {
|
||||
// save profile activations before interpolation, since they are evaluated with limited scope
|
||||
List<Profile> originalActivations = getProfiles(model, true);
|
||||
List<Profile> originalProfiles = getProfiles(model, true);
|
||||
|
||||
Model interpolatedModel =
|
||||
modelInterpolator.interpolateModel(model, model.getProjectDirectory(), request, problems);
|
||||
|
@ -791,8 +792,11 @@ public class DefaultModelBuilder implements ModelBuilder {
|
|||
}
|
||||
interpolatedModel.setPomFile(model.getPomFile());
|
||||
|
||||
// restore profiles with file activation to their value before full interpolation
|
||||
model.setProfiles(originalActivations);
|
||||
// restore profiles with any activation to their value before full interpolation
|
||||
List<Profile> interpolatedProfiles = model.getProfiles();
|
||||
IntStream.range(0, interpolatedProfiles.size()).forEach(i -> interpolatedProfiles
|
||||
.get(i)
|
||||
.setActivation(originalProfiles.get(i).getActivation()));
|
||||
|
||||
return interpolatedModel;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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
|
||||
*
|
||||
* http://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.
|
||||
*/
|
||||
package org.apache.maven.model.profile;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Plugin;
|
||||
import org.apache.maven.model.building.DefaultModelBuilderFactory;
|
||||
import org.apache.maven.model.building.DefaultModelBuildingRequest;
|
||||
import org.apache.maven.model.building.FileModelSource;
|
||||
import org.apache.maven.model.building.ModelBuilder;
|
||||
import org.apache.maven.model.building.ModelBuildingRequest;
|
||||
import org.apache.maven.model.building.ModelBuildingResult;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
/**
|
||||
* Tests model builder profile interpolation.
|
||||
*/
|
||||
public class DefaultProfileInterpolationTest {
|
||||
private File getPom(String name) {
|
||||
return new File("src/test/resources/poms/profile/" + name);
|
||||
}
|
||||
|
||||
/**
|
||||
* MNG-8188: profile interpolation was "undone" by mistake. This UT executes reproducer and ensures that
|
||||
* profile interpolated values (sans activation) are fully interpolated.
|
||||
*/
|
||||
@Test
|
||||
public void profilePropertiesInterpolation() throws Exception {
|
||||
ModelBuilder builder = new DefaultModelBuilderFactory().newInstance();
|
||||
assertNotNull(builder);
|
||||
|
||||
DefaultModelBuildingRequest request = new DefaultModelBuildingRequest();
|
||||
request.setModelSource(new FileModelSource(getPom("mng8188.xml")));
|
||||
request.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1);
|
||||
|
||||
ModelBuildingResult result = builder.build(request);
|
||||
assertNotNull(result);
|
||||
Model effectiveModel = result.getEffectiveModel();
|
||||
assertNotNull(effectiveModel);
|
||||
|
||||
Plugin interpolatedPlugin = null;
|
||||
|
||||
// build/pluginManagement
|
||||
for (Plugin plugin : effectiveModel.getBuild().getPluginManagement().getPlugins()) {
|
||||
if ("spring-boot-maven-plugin".equals(plugin.getArtifactId())) {
|
||||
interpolatedPlugin = plugin;
|
||||
break;
|
||||
}
|
||||
}
|
||||
assertNotNull(interpolatedPlugin);
|
||||
assertEquals("3.3.1", interpolatedPlugin.getVersion());
|
||||
|
||||
// profiles/foo/build/pluginManagement
|
||||
interpolatedPlugin = null;
|
||||
for (Plugin plugin : effectiveModel
|
||||
.getProfiles()
|
||||
.get(0)
|
||||
.getBuild()
|
||||
.getPluginManagement()
|
||||
.getPlugins()) {
|
||||
if ("spring-boot-maven-plugin".equals(plugin.getArtifactId())) {
|
||||
interpolatedPlugin = plugin;
|
||||
break;
|
||||
}
|
||||
}
|
||||
assertNotNull(interpolatedPlugin);
|
||||
assertEquals("3.3.1", interpolatedPlugin.getVersion());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you 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
|
||||
|
||||
http://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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>profile</groupId>
|
||||
<artifactId>mng8188</artifactId>
|
||||
<version>1.0</version>
|
||||
|
||||
<properties>
|
||||
<version.spring-boot>3.3.1</version.spring-boot>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>${version.spring-boot}</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>foo</id>
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>${version.spring-boot}</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
Loading…
Reference in New Issue