Hi John,

> -----Original Message-----
> From: John Casey [mailto:[EMAIL PROTECTED]
> Sent: lundi 12 septembre 2005 04:26
> To: Maven Developers List
> Subject: Re: Questions of profiles and settings...

[snip]

> | * It seems that I need to put my project-specific profiles in a
> profiles.xml
> | file located in my project. So far so good. However, how can I trigger a
> | profile automatically? I could by having an activeProfile element in the
> | master settings.xml file but I don't want to do that as this activation
> is
> | only for this specific project so I want to contain everything related
> to
> | this project in the project's root dir.
> |
> | Here's a reminder of what I'd like to do (from the previous email):
> | - I have a property named ${cargo.containers} that has a default value
> set
> | up in a profile inlined in pom.xml
> | - I'd like that users of the build could specify an overridden value for
> | this cargo.containers property. The best place to do that is in a
> | profile.xml file in the project's root dir.
> | - I'd like their overridden value to be used when they type "m2 install"
> | without them having to type "m2 -Denv=myprofile install" which is too
> much
> | of a hassle IMO
> |
> 
> If you want to, you can have a profile activated based on the presence
> or value of any system property. So, if you want the profile
> 'user-jdcasey' to be activated when I run the build, you might do
> something like this:
> 
> <profile>
> ~  <id>user-jdcasey</id>
> 
> ~  <activation>
> ~    <property>
> ~      <name>user.name</name>
> ~      <value>jdcasey</value>
> ~    </property>
> ~  </activation>
> 
> ~  ...
> </profile>

Thanks for this trick. However it sounds too much tricky IMO to be the final
solution. I might be logged under a different user name, etc. I think we
need something explicit when we want a profile to be always actiated.

Why don't we add an <activation> element such as <always/> which would
indicated the profile is always active?

[snip]

> |
> | Note: The reason I want this profile to be always on is because I want
> to
> | always have a default property for ${cargo.containers}.
> 
> You might want to use a new feature to m2: POM-level properties. This is
> essentially the same capability you have with profiles, except it's
> built into the POM itself (sans profile). So, if you want to provide
> default values that can be overridden, you would probably want to use
> these.
> 
> One side effect of POM-level properties is that you can pick and choose
> which configuration points you want to expose for plugin definitions
> that are inherited. For example, you might define a plugin in your
> parent POM, with configurations that have a common expression for part
> of their paths:
> 
> <configuration>
> ~  <param1>${rootPath}/to/somewhere</param1>
> ~  <param2>${rootPath}/to/somewhere-else</param2>
> </configuration>
> 
> Now, the user who extends this parent POM doesn't have to redeclare the
> plugin and reconfigure it, replicating the subdirectory structure...they
> can simply redefine ${rootPath}. This redefinition can be done via
> profile or via a child POM that has its own POM-level properties.

I'm still unsure how POM-level properties are defined. For example in your
example above where is rootPath defined? 

How is that different from my example:

pom.xml:
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <systemProperties combine.children="append">
            <property>
              <name>cargo.containers</name>
              <value>${cargo.containers}</value>
            </property>
          </systemProperties>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>default</id>
      <properties>
        <cargo.containers>resin3x, orion2x,...</cargo.containers>
      </properties>
    </profile>
  </profiles>
</project>

Following your definition I could call cargo.containers a POM-level property
defined by a profile it seems. Is that correct?

You mentioned the ability to define this property in a child POM. What
syntax would you use?

However in my case, the user of this POM is an end-user so I guess he has to
use a profile for that.

> |
> | * How do I tell m2 that the profile I have defined in the pom.xml file
> must
> | always be activated (I thought naming it "default" would work but
> apparently
> | not)?
> 
> With POM-level properties you shouldn't really have to, but if you did,
> you might want something silly like this:
> 
> <profile>
> ~  <id>always-on</id>
> 
> ~  <activation>
> ~    <property>
> ~      <name>java.version</name>
> ~    </property>
> ~  </activation>
> 
> ~  ...
> </profile>
> 
> which will result in the profile being activated whenever the system
> property 'java.version' is defined, which should be always. It's a bit
> silly, but if you want system-dependent paths in your builds, you might
> do something like this in your settings.xml. Hmm, looks like we /could/
> use a default profile for the settings.xml... ;)

Yes, we really need something less "magical"... Naming it "default" is also
a bit magical. Why not do as I suggested above and add a nested <always/>
element of <activation>?

BTW, there's already a JIRA for this: 
http://jira.codehaus.org/browse/MNG-835
 
> | * The http://maven.apache.org/maven2/profiles-overview.html doc is quite
> | nice. It explains well what is dangerous with profiles and with an
> appserver
> | path property but it doesn't give a solution (or I haven't found
> it)... :-)
> | I think what I want to do by using a default value specified in an
> inlined
> | profile would do the trick but I can't find a solution to activate this
> | default profile...
> 
> See if the above advice helps, and if not, let us know...we're going to
> be pretty busy fixing these types of things for the next few weeks.

Cool. I have the feeling that settings/profiles/inlined profiles/POM-level
properties are all a bit complex for the end user when defining properties.
There are several ways of doing the same thing which is always a bit
worrying.

In any case, it sounds way more complex than the previous build.properties
file (it's doing more of course but I'm only talking about defining a
property). We should make it dead simple to define a simple
environment-dependent property.

Thanks a lot
-Vincent


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to