J. Lewis Muir
2018-11-14 21:24:13 UTC
Hello, all!
I have an extension
https://github.com/imca-cat/profile-activation-advanced
that allows property-based profile activation based on an MVEL
expression.
My problem is that it works
===
$ mvn help:active-profiles validate
...
The following profiles are active:
- foo_env-development (source: org.example.foo:foo:1.0.0)
...
===
when loaded via Maven's lib/ext directory or when specified on the
command line with "-Dmaven.ext.class.path=<path-to-extension-jars>", but
does *not* work
===
$ mvn help:active-profiles validate
...
The following profiles are active:
...
===
when loaded via a project's .mvn/extensions.xml file.
The extension hijacks the normal property activator like this
@Component(role = ProfileActivator.class, hint = "property")
public class AdvancedProfileActivator implements ProfileActivator {
...
}
and evaluates the property value as an MVEL expression if the property
name equals "mvel" or "mvel(" <properties-map-identifier> ")".
Does anyone know why it would work from Maven's lib/ext directory, but
not from a project's .mvn/extensions.xml file? Or does anyone know how
to debug this?
Is it possible that the hijack doesn't work when loaded from a
project's .mvn/extensions.xml because the original profile activator is
found on the class path *before* the AdvancedProfileActivator of the
extension, but when the extension JAR is placed in Maven's lib/ext,
the AdvancedProfileActivator is found on the class path *before* the
original profile activator? (Just a wild guess.)
The full source code of the extension's profile activator is at
https://github.com/imca-cat/profile-activation-advanced/blob/master/src/main/java/org/imca_cat/maven/profile_activation_advanced/AdvancedProfileActivator.java
To reproduce the problem, simply create a new Maven project directory
containing the following pom.xml file:
===
<?xml version="1.0" encoding="UTF-8"?>
<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example.foo</groupId>
<artifactId>foo</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<profiles>
<profile>
<id>foo_env-development</id>
<activation>
<property>
<name>mvel</name>
<value>(!isdef foo_env) || foo_env == "development"</value>
</property>
</activation>
</profile>
</profiles>
</project>
===
(The foo_env-development profile should activate if the foo_env property
(or system property) is not set or is set to the string "development".)
Create .mvn/extensions.xml:
===
<?xml version="1.0" encoding="UTF-8"?>
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0
http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>org.imca-cat.maven</groupId>
<artifactId>profile-activation-advanced</artifactId>
<version>0.1.0</version>
</extension>
</extensions>
===
Run the following command:
===
$ mvn help:active-profiles validate
===
It should report that the foo_env-development profile is active (because
the foo_env property is not set), but it does not. :-(
I previously asked on the Maven User list
https://lists.apache.org/thread.html/99ee87ba1bc86d98652173482b3a5882a52e344fad18df2cd50e8750@%3Cusers.maven.apache.org%3E
but did not receive any replies.
Thank you for your help!
Lewis
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-***@maven.apache.org
For additional commands, e-mail: dev-***@maven.apache.org
I have an extension
https://github.com/imca-cat/profile-activation-advanced
that allows property-based profile activation based on an MVEL
expression.
My problem is that it works
===
$ mvn help:active-profiles validate
...
The following profiles are active:
- foo_env-development (source: org.example.foo:foo:1.0.0)
...
===
when loaded via Maven's lib/ext directory or when specified on the
command line with "-Dmaven.ext.class.path=<path-to-extension-jars>", but
does *not* work
===
$ mvn help:active-profiles validate
...
The following profiles are active:
...
===
when loaded via a project's .mvn/extensions.xml file.
The extension hijacks the normal property activator like this
@Component(role = ProfileActivator.class, hint = "property")
public class AdvancedProfileActivator implements ProfileActivator {
...
}
and evaluates the property value as an MVEL expression if the property
name equals "mvel" or "mvel(" <properties-map-identifier> ")".
Does anyone know why it would work from Maven's lib/ext directory, but
not from a project's .mvn/extensions.xml file? Or does anyone know how
to debug this?
Is it possible that the hijack doesn't work when loaded from a
project's .mvn/extensions.xml because the original profile activator is
found on the class path *before* the AdvancedProfileActivator of the
extension, but when the extension JAR is placed in Maven's lib/ext,
the AdvancedProfileActivator is found on the class path *before* the
original profile activator? (Just a wild guess.)
The full source code of the extension's profile activator is at
https://github.com/imca-cat/profile-activation-advanced/blob/master/src/main/java/org/imca_cat/maven/profile_activation_advanced/AdvancedProfileActivator.java
To reproduce the problem, simply create a new Maven project directory
containing the following pom.xml file:
===
<?xml version="1.0" encoding="UTF-8"?>
<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example.foo</groupId>
<artifactId>foo</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<profiles>
<profile>
<id>foo_env-development</id>
<activation>
<property>
<name>mvel</name>
<value>(!isdef foo_env) || foo_env == "development"</value>
</property>
</activation>
</profile>
</profiles>
</project>
===
(The foo_env-development profile should activate if the foo_env property
(or system property) is not set or is set to the string "development".)
Create .mvn/extensions.xml:
===
<?xml version="1.0" encoding="UTF-8"?>
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0
http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>org.imca-cat.maven</groupId>
<artifactId>profile-activation-advanced</artifactId>
<version>0.1.0</version>
</extension>
</extensions>
===
Run the following command:
===
$ mvn help:active-profiles validate
===
It should report that the foo_env-development profile is active (because
the foo_env property is not set), but it does not. :-(
I previously asked on the Maven User list
https://lists.apache.org/thread.html/99ee87ba1bc86d98652173482b3a5882a52e344fad18df2cd50e8750@%3Cusers.maven.apache.org%3E
but did not receive any replies.
Thank you for your help!
Lewis
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-***@maven.apache.org
For additional commands, e-mail: dev-***@maven.apache.org