Discussion:
How to override an activeByDefault profile?
Morris Jones
2007-10-25 18:01:28 UTC
Permalink
Say I have a settings.xml file with three profiles, "dev" "qa" and
"production". The active profile will set variables that determine
which database to use and things like that.

I have activations so that I can use -Denv=qa or -Denv=dev to get the
right profile. But I'd like to have one of the profiles to be the
default _in case another one isn't selected_. That way I'm not always
having to type -Denv=dev when I do a dev built.

So I put an <activeByDefault>true</activeByDefault> tag in the dev
profile, and false on the others.

Now mvn help:active-profiles reports:

The following profiles are active:

- env-dev (source: settings.xml)
- env-dev (source: settings.xml)

(Twice?)

And if I do mvn -Denv=qa help:active-profiles I get:

The following profiles are active:

- env-dev (source: settings.xml)
- env-qa (source: settings.xml)
- env-dev (source: settings.xml)

And my app is built with the dev profile.

In other words, I can't override the activeByDefault setting, no matter
what I specify. I get the same thing if I say "mvn -P env-qa
help:active-profiles".

What is it I'm missing here?

Mojo
--
Morris Jones
Monrovia, CA
http://www.whiteoaks.com
Old Town Astronomers http://www.otastro.org
Nick Stolwijk
2007-10-25 18:19:49 UTC
Permalink
I thought I had a solution, but it didn't work. I think it should work,
but I'm not certain. This could be a bug. This is what I had:

<properties>
<dev-active>true</dev-active>
</properties>

<profiles>
<profile>
<id>dev</id>
<activation>
<property>
<name>dev-active</name>
<value>true</value>
</property>
</activation>
</profile>
<profile>
<id>prod</id>
<activation>
<property>
<name>env</name>
<value>prod</value>
</property>
</activation>
<properties>
<dev-active>false</dev-active>
</properties>
</profile>
<profile>
<id>qa</id>
<activation>
<property>
<name>env</name>
<value>qa</value>
</property>
</activation>
<properties>
<dev-active>false</dev-active>
</properties>
</profile>
</profiles>

In short, only activate dev when the property is true. When activating
another profile, set the property to false. Unfortunately, it ain't
working. Somebody has a better idea?

Hth,

Nick Stolwijk
Post by Morris Jones
Say I have a settings.xml file with three profiles, "dev" "qa" and
"production". The active profile will set variables that determine
which database to use and things like that.
I have activations so that I can use -Denv=qa or -Denv=dev to get the
right profile. But I'd like to have one of the profiles to be the
default _in case another one isn't selected_. That way I'm not always
having to type -Denv=dev when I do a dev built.
So I put an <activeByDefault>true</activeByDefault> tag in the dev
profile, and false on the others.
- env-dev (source: settings.xml)
- env-dev (source: settings.xml)
(Twice?)
- env-dev (source: settings.xml)
- env-qa (source: settings.xml)
- env-dev (source: settings.xml)
And my app is built with the dev profile.
In other words, I can't override the activeByDefault setting, no
matter what I specify. I get the same thing if I say "mvn -P env-qa
help:active-profiles".
What is it I'm missing here?
Mojo
Ian Springer
2007-10-25 18:32:39 UTC
Permalink
I recall reading somewhere in the Maven docs or wiki that
activeByDefault has higher precedence than even properties specified on
the command line. Have you tried using:

<settings>
...
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
...
</settings>

?
Post by Nick Stolwijk
I thought I had a solution, but it didn't work. I think it should
<properties>
<dev-active>true</dev-active>
</properties>
<profiles>
<profile>
<id>dev</id>
<activation>
<property>
<name>dev-active</name>
<value>true</value>
</property>
</activation>
</profile>
<profile>
<id>prod</id>
<activation>
<property>
<name>env</name>
<value>prod</value>
</property>
</activation>
<properties>
<dev-active>false</dev-active>
</properties>
</profile>
<profile>
<id>qa</id>
<activation>
<property>
<name>env</name>
<value>qa</value>
</property>
</activation>
<properties>
<dev-active>false</dev-active>
</properties>
</profile>
</profiles>
In short, only activate dev when the property is true. When activating
another profile, set the property to false. Unfortunately, it ain't
working. Somebody has a better idea?
Hth,
Nick Stolwijk
Post by Morris Jones
Say I have a settings.xml file with three profiles, "dev" "qa" and
"production". The active profile will set variables that determine
which database to use and things like that.
I have activations so that I can use -Denv=qa or -Denv=dev to get the
right profile. But I'd like to have one of the profiles to be the
default _in case another one isn't selected_. That way I'm not
always having to type -Denv=dev when I do a dev built.
So I put an <activeByDefault>true</activeByDefault> tag in the dev
profile, and false on the others.
- env-dev (source: settings.xml)
- env-dev (source: settings.xml)
(Twice?)
- env-dev (source: settings.xml)
- env-qa (source: settings.xml)
- env-dev (source: settings.xml)
And my app is built with the dev profile.
In other words, I can't override the activeByDefault setting, no
matter what I specify. I get the same thing if I say "mvn -P env-qa
help:active-profiles".
What is it I'm missing here?
Mojo
---------------------------------------------------------------------
Morris Jones
2007-10-25 19:28:12 UTC
Permalink
Hi Ian, thanks. Yes, I've tried that. It has the same effect as
specifying a different profile on the command line. In this case, the
one set in activeProfiles is _always_ active, and can't be overridden at
all. :(

Mojo
Post by Ian Springer
I recall reading somewhere in the Maven docs or wiki that
activeByDefault has higher precedence than even properties specified on
<settings>
...
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
...
</settings>
?
Post by Nick Stolwijk
I thought I had a solution, but it didn't work. I think it should
<properties>
<dev-active>true</dev-active>
</properties>
<profiles>
<profile>
<id>dev</id>
<activation>
<property>
<name>dev-active</name>
<value>true</value>
</property>
</activation>
</profile>
<profile>
<id>prod</id>
<activation>
<property>
<name>env</name>
<value>prod</value>
</property>
</activation>
<properties>
<dev-active>false</dev-active>
</properties>
</profile>
<profile>
<id>qa</id>
<activation>
<property>
<name>env</name>
<value>qa</value>
</property>
</activation>
<properties>
<dev-active>false</dev-active>
</properties>
</profile>
</profiles>
In short, only activate dev when the property is true. When activating
another profile, set the property to false. Unfortunately, it ain't
working. Somebody has a better idea?
Hth,
Nick Stolwijk
Post by Morris Jones
Say I have a settings.xml file with three profiles, "dev" "qa" and
"production". The active profile will set variables that determine
which database to use and things like that.
I have activations so that I can use -Denv=qa or -Denv=dev to get the
right profile. But I'd like to have one of the profiles to be the
default _in case another one isn't selected_. That way I'm not
always having to type -Denv=dev when I do a dev built.
So I put an <activeByDefault>true</activeByDefault> tag in the dev
profile, and false on the others.
- env-dev (source: settings.xml)
- env-dev (source: settings.xml)
(Twice?)
- env-dev (source: settings.xml)
- env-qa (source: settings.xml)
- env-dev (source: settings.xml)
And my app is built with the dev profile.
In other words, I can't override the activeByDefault setting, no
matter what I specify. I get the same thing if I say "mvn -P env-qa
help:active-profiles".
What is it I'm missing here?
Mojo
---------------------------------------------------------------------
---------------------------------------------------------------------
--
Morris Jones
Monrovia, CA
http://www.whiteoaks.com
Old Town Astronomers http://www.otastro.org
Greg Morgan
2007-10-28 23:11:14 UTC
Permalink
Post by Morris Jones
Say I have a settings.xml file with three profiles, "dev" "qa" and
"production". The active profile will set variables that determine
which database to use and things like that.
I have a sense that you are almost there. I would rather that you
create all of your profiles in the pom.xml file. Use a corresponding
key in your settings.xml file for password data. I believe what you are
experiencing is that all the profiles are active because there is no tie
to the pom.xml file.

http://www.devx.com/Java/Article/32386/0/page/2

"Environmental Portability with Profiles
As a general rule, try to make one profile per environment. Unless you
are building on more than five or so environment types, I suggest
putting the profile in the POM. Then you may activate the desired
profile via the -P argument on the command line. You can test which
profiles are currently active with the "help" plugin, like this:


mvn help:active-profiles

It sounds like you are trying to do all this in your settings.xml file.

HTH,
Greg
Post by Morris Jones
I have activations so that I can use -Denv=qa or -Denv=dev to get the
right profile. But I'd like to have one of the profiles to be the
default _in case another one isn't selected_. That way I'm not always
having to type -Denv=dev when I do a dev built.
So I put an <activeByDefault>true</activeByDefault> tag in the dev
profile, and false on the others.
- env-dev (source: settings.xml)
- env-dev (source: settings.xml)
(Twice?)
- env-dev (source: settings.xml)
- env-qa (source: settings.xml)
- env-dev (source: settings.xml)
And my app is built with the dev profile.
In other words, I can't override the activeByDefault setting, no matter
what I specify. I get the same thing if I say "mvn -P env-qa
help:active-profiles".
What is it I'm missing here?
Mojo
Loading...