You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Karl Heinz Marbaise (JIRA)" <ji...@apache.org> on 2016/07/03 11:35:11 UTC
[jira] [Comment Edited] (MNG-5895) Problem with CI friendly usage
of ${..} which is already defined via property in pom file.
[ https://issues.apache.org/jira/browse/MNG-5895?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15360499#comment-15360499 ]
Karl Heinz Marbaise edited comment on MNG-5895 at 7/3/16 11:34 AM:
-------------------------------------------------------------------
The {{DefaultModelBuilder}} contains a private method:
{code:java}
private Model interpolateModel( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
{
// save profile activations before interpolation, since they are evaluated with limited scope
Map<String, Activation> originalActivations = getProfileActivations( model, true );
Model result = modelInterpolator.interpolateModel( model, model.getProjectDirectory(),
request, problems );
..
}
{code}
which interpolates the usual part of the model but leaves the parent entry untouched. A short PoC hack showed me that If i do something like this (HACK for testing purposes only):
{code:java}
private Model interpolateModel( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
{
// save profile activations before interpolation, since they are evaluated with limited scope
Map<String, Activation> originalActivations = getProfileActivations( model, true );
Model result = modelInterpolator.interpolateModel( model, model.getProjectDirectory(), request, problems );
if (result.getParent() != null) {
String version = result.getParent().getVersion();
if (version != null) {
//FIXME: Hack First (WILL NOT WORK in all cases!!!!)
if (version.contains( "${revision}" )) {
String property = request.getUserProperties().getProperty( "revision");
result.getParent().setVersion( property );
}
if (version.contains( "${changelist}" )) {
String property = request.getUserProperties().getProperty( "changelist");
result.getParent().setVersion( property );
}
if (version.contains( "${sha1}" )) {
String property = request.getUserProperties().getProperty( "sha1");
result.getParent().setVersion( property );
}
}
}
result.setPomFile( model.getPomFile() );
// restore profiles with file activation to their value before full interpolation
injectProfileActivations( model, originalActivations );
return result;
}
{code}
This shows that the ordering problem in the reactor is solved with this HACK (limited use case).
The above also fixes the problem using the command line to override the {{revision}} property from command line and fixes the
issue related to maven-assembly-plugin to produce the correct versioned artifacts. So now i need to find a more elegant way to do that same...
was (Author: khmarbaise):
The {{DefaultModelBuilder}} contains a private method:
{code:java}
private Model interpolateModel( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
{
// save profile activations before interpolation, since they are evaluated with limited scope
Map<String, Activation> originalActivations = getProfileActivations( model, true );
Model result = modelInterpolator.interpolateModel( model, model.getProjectDirectory(),
request, problems );
..
}
which interpolates the usual part of the model but leaves the parent entry untouched. A short PoC hack showed me that If i do something like this (HACK for testing purposes only):
{code:java}
private Model interpolateModel( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
{
// save profile activations before interpolation, since they are evaluated with limited scope
Map<String, Activation> originalActivations = getProfileActivations( model, true );
Model result = modelInterpolator.interpolateModel( model, model.getProjectDirectory(), request, problems );
if (result.getParent() != null) {
String version = result.getParent().getVersion();
if (version != null) {
//FIXME: Hack First (WILL NOT WORK in all cases!!!!)
if (version.contains( "${revision}" )) {
String property = request.getUserProperties().getProperty( "revision");
result.getParent().setVersion( property );
}
if (version.contains( "${changelist}" )) {
String property = request.getUserProperties().getProperty( "changelist");
result.getParent().setVersion( property );
}
if (version.contains( "${sha1}" )) {
String property = request.getUserProperties().getProperty( "sha1");
result.getParent().setVersion( property );
}
}
}
result.setPomFile( model.getPomFile() );
// restore profiles with file activation to their value before full interpolation
injectProfileActivations( model, originalActivations );
return result;
}
{code}
This shows that the ordering problem in the reactor is solved with this HACK (limited use case).
The above also fixes the problem using the command line to override the {{revision}} property from command line and fixes the
issue related to maven-assembly-plugin to produce the correct versioned artifacts. So now i need to find a more elegant way to do that same...
> Problem with CI friendly usage of ${..} which is already defined via property in pom file.
> ------------------------------------------------------------------------------------------
>
> Key: MNG-5895
> URL: https://issues.apache.org/jira/browse/MNG-5895
> Project: Maven
> Issue Type: Bug
> Affects Versions: 3.2.1, 3.2.2, 3.2.5, 3.3.1, 3.3.3
> Reporter: Karl Heinz Marbaise
> Attachments: x.diff
>
>
> I have test project where i defined the pom like this:
> {code:xml}
> <modelVersion>4.0.0</modelVersion>
> <groupId>com.soebes.examples.j2ee</groupId>
> <artifactId>parent</artifactId>
> <version>${revision}</version>
> <packaging>pom</packaging>
> {code}
> If i define the revision on command line like this.
> {{mvn -Drevision=1.0-SNAPSHOT clean package}}
> everything fine...
> But now i want to make the usage a bit more convenient so i added the following to my pom:
> {code:xml}
> <properties>
> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
> <revision>1.0-SNAPSHOT</revision>
> </properties>
> {code}
> to have a default for revision which works fine now...
> But if i would like to overwrite the property from command line like this:
> {{mvn -Drevision=1.0 clean package}}
> the build failes in the following location:
> {noformat}
> [ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.5.5:single (assemblies) on project assembly:
> Failed to create assembly: Unable to resolve dependencies for assembly 'archive': Failed to resolve dependencies for assembly:
> Unable to get dependency information for com.soebes.examples.j2ee:service-client:jar:1.0-SNAPSHOT:
> Failed to process POM for com.soebes.examples.j2ee:service-client:jar:1.0-SNAPSHOT:
> Non-resolvable parent POM for com.soebes.examples.j2ee:service-client:[unknown-version]:
> Failure to find com.soebes.examples.j2ee:parent:pom:${revision} in http://localhost:8081/nexus/content/groups/public was
> cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or
> updates are forced
> [ERROR] com.soebes.examples.j2ee:service-client:jar:1.0-SNAPSHOT
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)