mirror of
https://github.com/apache/maven.git
synced 2025-02-08 02:59:22 +00:00
[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.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
||||||
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
|
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
|
||||||
@ -764,7 +765,7 @@ private List<Profile> getProfiles(Model model, boolean clone) {
|
|||||||
|
|
||||||
private Model interpolateModel(Model model, ModelBuildingRequest request, ModelProblemCollector problems) {
|
private Model interpolateModel(Model model, ModelBuildingRequest request, ModelProblemCollector problems) {
|
||||||
// save profile activations before interpolation, since they are evaluated with limited scope
|
// 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 =
|
Model interpolatedModel =
|
||||||
modelInterpolator.interpolateModel(model, model.getProjectDirectory(), request, problems);
|
modelInterpolator.interpolateModel(model, model.getProjectDirectory(), request, problems);
|
||||||
@ -791,8 +792,11 @@ private Model interpolateModel(Model model, ModelBuildingRequest request, ModelP
|
|||||||
}
|
}
|
||||||
interpolatedModel.setPomFile(model.getPomFile());
|
interpolatedModel.setPomFile(model.getPomFile());
|
||||||
|
|
||||||
// restore profiles with file activation to their value before full interpolation
|
// restore profiles with any activation to their value before full interpolation
|
||||||
model.setProfiles(originalActivations);
|
List<Profile> interpolatedProfiles = model.getProfiles();
|
||||||
|
IntStream.range(0, interpolatedProfiles.size()).forEach(i -> interpolatedProfiles
|
||||||
|
.get(i)
|
||||||
|
.setActivation(originalProfiles.get(i).getActivation()));
|
||||||
|
|
||||||
return interpolatedModel;
|
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…
x
Reference in New Issue
Block a user