You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Christian Sauer <ch...@giniality.ch> on 2007/03/14 08:45:58 UTC

Re: [m2] Is it possible to have application-specific properties in settings.xml?

Hi,

concerning profiles, settings.xml and pom inheritance I can recommend the maven help 
plugin: http://maven.apache.org/plugins/maven-help-plugin/usage.html

With this plugin you can show an effective pom for each of your profiles. This helped me 
a lot struggeling with the profiles jungle ;)

Hope that helps ...

cheers,
chris

-----Original Message-----
From: "Wayne Fay" <wa...@gmail.com>
To: "Maven Users List" <us...@maven.apache.org>
Date: Tue, 13 Mar 2007 22:51:28 -0600
Subject: Re: [m2] Is it possible to have application-specific properties in settings.xml?

> Unfortunately, you're getting into some hairy stuff with all these
> profiles and properties. I don't honestly know which profile (or
> property) will be read first, nor which file, and when you throw
> multiple activeByDefault profiles into the mix, who knows what will
> come out??
> 
> Unless someone knows of specific documentation (other than source
> code) that would be useful to help figure this out, I'm really not
> certain how to resolve your troubles.
> 
> I would try some more tests -- perhaps try profile ids "abc" and "def"
> and "xyz" in different orders in the file to see if the id has any
> effect on the ordering, or simply the ordering in the file, etc.
> Perhaps someone on this list has more experience with complicated
> profiles and properties and can provide some help?
> 
> Wayne
> 
> On 3/13/07, mraible <ma...@raibledesigns.com> wrote:
> >
> > Thanks for sending me a sample project Wayne.  You are correct - it works
> > fine for your project.  However, I've stared at your project and mine for
> > the last 15 minutes and I still can't figure out what's different.  One
> > thing that's different is I'm filtering <testResources> rather than
> > <resources>, but I doubt that's it.  Also, I don't have filtering turned on
> > in my root pom.xml, but rather in my core module.  I tried moving things in
> > yours and it still works.  Doh!
> >
> > I tried running "mvn help:active-profiles" on both projects. Mine has the
> > same results as yours.
> >
> > Now that I'm writing this, one thing comes to mind that could be the
> > problem:
> >
> > In my root pom.xml, I have:
> >
> > <properties>
> >     <jdbc.url>localhost.for.mysql</jdbc.url>
> > </properties>
> >
> > <profiles>
> >    <profile>
> >       <id>sqlserver</id>
> >       <activation><activeByDefault>true</activeByDefault</activation>
> >       <properties>
> >           <jdbc.url>localhost.for.sqlserver</jdbc.url>
> >       </properties>
> >   </profile>
> > </profiles>
> >
> > So it's possible that my "sqlserver" profile is overriding my profiles.xml.
> > Is there any way to order these or is it better to move my default
> > <properties> into a profile for mysql?
> >
> > Thanks,
> >
> > Matt
> >
> >
> > Wayne Fay wrote:
> > >
> > > I have no idea... I made a little test project to see what happens and
> > > it seems to work like I said, and not like you're experiencing, so I
> > > guess something else is up on your side (??).
> > >
> > > I will go ahead and send the zip directly to you Matt as I know
> > > attachments generally don't get passed through this mailing list...
> > > But please reply to this email (on list) so we can keep the
> > > conversation public, if you don't mind.
> > >
> > > Wayne
> > >
> > > On 3/13/07, mraible <ma...@raibledesigns.com> wrote:
> > >>
> > >> I'm seeing some strange behavior with this.  I've added a profiles.xml in
> > >> the
> > >> root of my project. Its contents are:
> > >>
> > >> <profiles>
> > >>     <profile>
> > >>         <id>xp</id>
> > >>         <activation>
> > >>             <activeByDefault>true</activeByDefault>
> > >>         </activation>
> > >>         <properties>
> > >>
> > >> <jdbc.url><![CDATA[jdbc:jtds:sqlserver://xpbox:1433/database]]></jdbc.url>
> > >>         </properties>
> > >>     </profile>
> > >> </profiles>
> > >>
> > >> When I cd into "core" and run "mvn test", the correct "jdbc.url" property
> > >> is
> > >> put into my filtered properties file.  However, when I run "mvn test"
> > >> from
> > >> the top-level directory, it uses the value from pom.xml.
> > >>
> > >> If I move the contents of profiles.xml to ~/.m2/settings.xml, everything
> > >> works fine, but I'm back to my same problem where this is a global
> > >> property
> > >> override, and I'm only looking to override for this one project.
> > >>
> > >> Any ideas why this happens?
> > >>
> > >> Thanks,
> > >>
> > >> Matt
> > >>
> > >>
> > >> mraible wrote:
> > >> >
> > >> > Thanks for the tip - I was able to use a profiles.xml file in my local
> > >> > project directory to get the behavior I wanted. Now I'm only overriding
> > >> > the property for a single project, and as long as I don't check it in
> > >> to
> > >> > SVN, everyone else retains the default behavior from pom.xml.  Another
> > >> > thing I tried was to use <file> activation in settings.xml (because
> > >> there
> > >> > are different files in the 2 Maven projects), but that didn't seem to
> > >> > work.  Here's what I used:
> > >> >
> > >> >           <activation>
> > >> >                 <file>
> > >> >                     <exists>${basedir}/lib/install.sh</exists>
> > >> >                 </file>
> > >> >             </activation>
> > >> >
> > >> > Thanks for the help Wayne - you solved my problem.
> > >> >
> > >> > Matt
> > >> >
> > >> >
> > >> > Wayne Fay wrote:
> > >> >>
> > >> >> Have you considered using a profiles.xml file (checked into SCM) which
> > >> >> contains settings specific to each person's environment? Then you
> > >> >> would use -Pmrmac which would specify the SQL server on another box,
> > >> >> while -Pmrxp would specify a local SQL server etc.
> > >> >>
> > >> >> This profiles.xml file would be available for everyone to read/write
> > >> >> but they would be responsible to only edit their piece of the config.
> > >> >> And you could have a generic config that is used for the common
> > >> >> developer environment with generic data. I'm not sure if this would
> > >> >> solve all your problems, though, as it would require you to copy this
> > >> >> profile.xml file to multiple locations in your SCM and potentially
> > >> >> keep them all in-sync.
> > >> >>
> > >> >> Wayne
> > >> >>
> > >> >> On 3/12/07, mraible <ma...@raibledesigns.com> wrote:
> > >> >>>
> > >> >>> I've read this page quite a few times and the answer still doesn't
> > >> jump
> > >> >>> out
> > >> >>> at me.  If I have two Maven projects that are completely unrelated,
> > >> but
> > >> >>> they
> > >> >>> use the same property name - how do I override this property's value
> > >> for
> > >> >>> one
> > >> >>> project, but not for the other?
> > >> >>>
> > >> >>> In other words, I want "jdbc.url" to have "localhost" for most
> > >> projects
> > >> >>> on
> > >> >>> my system.  And in the SVN version of this other project, I have
> > >> >>> "localhost".  However, because I need to connect to a Windows/SQL
> > >> Server
> > >> >>> box
> > >> >>> for this one project, I need to change <jdbc.url> to have "xpboxname"
> > >> >>> instead of localhost.  If I use any sort of system properties, that
> > >> >>> applies
> > >> >>> to all projects.  If I modify the pom.xml, that changes things for
> > >> >>> everyone
> > >> >>> (which doesn't need to happen because I'm on the only one on a Mac).
> > >> >>>
> > >> >>> I'm all for a workaround, but the only two options I see right now
> > >> are:
> > >> >>>
> > >> >>> 1. Comment out the <activeByDefault> setting in pom.xml when I want
> > >> to
> > >> >>> work
> > >> >>> on other projects (not the one that needs XP).
> > >> >>> 2. Change /etc/hosts so localhost resolves to my XP box.
> > >> >>>
> > >> >>> Thanks for any advice,
> > >> >>>
> > >> >>> Matt
> > >> >>>
> > >> >>>
> > >> >>> Wayne Fay wrote:
> > >> >>> >
> > >> >>> > It might be useful to review this documentation to make sure you're
> > >> >>> > doing it "the one true way". ;-)
> > >> >>> >
> > >> >>> >
> > >> >>>
> > >> http://maven.apache.org/guides/introduction/introduction-to-profiles.html
> > >> >>> >
> > >> >>> > Wayne
> > >> >>> >
> > >> >>> > On 3/12/07, mraible <ma...@raibledesigns.com> wrote:
> > >> >>> >>
> > >> >>> >> Don't worry - I am doing things "The Maven Way" with properties in
> > >> >>> the
> > >> >>> >> root
> > >> >>> >> pom.xml.  However, for this particular application, I need to
> > >> >>> override a
> > >> >>> >> property in settings.xml (I'm on a Mac and need to connect to a
> > >> SQL
> > >> >>> >> Server
> > >> >>> >> instance not on "localhost"). The problem is, I have another
> > >> >>> application
> > >> >>> >> that uses the same property name (this can't be that rare, can
> > >> it?).
> > >> >>> So
> > >> >>> >> when
> > >> >>> >> I override it in settings.xml, it overrides all my projects that
> > >> use
> > >> >>> that
> > >> >>> >> property name.
> > >> >>> >>
> > >> >>> >> Matt
> > >> >>> >>
> > >> >>> >>
> > >> >>> >>
> > >> >>> >> Wayne Fay wrote:
> > >> >>> >> >
> > >> >>> >> > You are really not encouraged to use application-specific
> > >> >>> properties
> > >> >>> >> > in a settings.xml file, as your builds will not be portable.
> > >> >>> Instead,
> > >> >>> >> > these kinds of properties should be placed directly in the pom
> > >> >>> (parent
> > >> >>> >> > or children as appropriate) of the project you are working on.
> > >> >>> >> >
> > >> >>> >> > I use a similar process for our Ant builds, with
> > >> project-specific
> > >> >>> >> > properties in my user home loaded first, then all-projects
> > >> >>> properties,
> > >> >>> >> > etc. I'm pretty sure this is a common pattern across Ant users.
> > >> >>> >> >
> > >> >>> >> > Wayne
> > >> >>> >> >
> > >> >>> >> > On 3/12/07, mraible <ma...@raibledesigns.com> wrote:
> > >> >>> >> >>
> > >> >>> >> >> Since there's been no answers to this question, I'll assume the
> > >> >>> answer
> > >> >>> >> is
> > >> >>> >> >> "No, it's not possible to use settings.xml to have
> > >> >>> >> application-specific
> > >> >>> >> >> properties."
> > >> >>> >> >>
> > >> >>> >> >> Matt
> > >> >>> >> >>
> > >> >>> >> >>
> > >> >>> >> >> mraible wrote:
> > >> >>> >> >> >
> > >> >>> >> >> > I have a number of properties for database settings in my
> > >> root
> > >> >>> >> pom.xml:
> > >> >>> >> >> >
> > >> >>> >> >> >         <!-- Database settings -->
> > >> >>> >> >> >
> > >> >>> >> >> >
> > >> >>> >> >>
> > >> >>> >>
> > >> >>>
> > >>
> <dbunit.dataTypeFactoryName>org.dbunit.dataset.datatype.DefaultDataTypeFactory</dbunit.
> dataTypeFactoryName>
> > >> >>> >> >> >
> > >> >>> <dbunit.operation.type>CLEAN_INSERT</dbunit.operation.type>
> > >> >>> >> >> >
> > >> >>> >> >> >
> > >> >>> >> >>
> > >> >>> >>
> > >> >>>
> > >> <hibernate.dialect>org.hibernate.dialect.MySQLInnoDBDialect</hibernate.dialect>
> > >> >>> >> >> >         <jdbc.groupId>mysql</jdbc.groupId>
> > >> >>> >> >> >
> > >> <jdbc.artifactId>mysql-connector-java</jdbc.artifactId>
> > >> >>> >> >> >         <jdbc.version>5.0.3</jdbc.version>
> > >> >>> >> >> >
> > >> >>> >> >>
> > >> <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
> > >> >>> >> >> >
> > >> >>> >> >> >
> > >> >>> >> >>
> > >> >>> >>
> > >> >>>
> > >>
> <jdbc.url><![CDATA[jdbc:mysql://localhost/tutorial?createDatabaseIfNotExist=true&amp;us
> eUnicode=true&amp;characterEncoding=utf-8]]></jdbc.url>
> > >> >>> >> >> >         <jdbc.username>root</jdbc.username>
> > >> >>> >> >> >         <jdbc.password></jdbc.password>
> > >> >>> >> >> >
> > >> >>> >> >> > This works great when I have a single project.  However, I've
> > >> >>> >> started
> > >> >>> >> >> to
> > >> >>> >> >> > develop two applications with this setup, and I need to
> > >> locally
> > >> >>> >> >> override
> > >> >>> >> >> > the jdbc.url for one of my projects.  Is it possible to do
> > >> this
> > >> >>> on
> > >> >>> >> an
> > >> >>> >> >> > application-specific basis w/o affecting both applications.
> > >> >>> AFAIK,
> > >> >>> >> >> > settings.xml doesn't have anything fancy like (does it?):
> > >> >>> >> >> >
> > >> >>> >> >> > <activation>
> > >> >>> >> >> >      <property>
> > >> >>> >> >> >          <name>${pom.artifactId}</name>
> > >> >>> >> >> >          <value>projecttoactivatefor</value>
> > >> >>> >> >> >      </property>
> > >> >>> >> >> > </activation>
> > >> >>> >> >> >
> > >> >>> >> >> > With Ant, I was able to accomplish this using:
> > >> >>> >> >> >
> > >> >>> >> >> >     <!-- Load user overrides -->
> > >> >>> >> >> >     <property
> > >> >>> >> >> file="${user.home}/.${ant.project.name}-build.properties"/>
> > >> >>> >> >> >     <property file="${user.home}/.build.properties"/>
> > >> >>> >> >> >     <property file="build.properties"/>
> > >> >>> >> >> >
> > >> >>> >> >> > Thanks,
> > >> >>> >> >> >
> > >> >>> >> >> > Matt
> > >> >>> >> >> >
> > >> >>> >> >>
> > >> >>> >> >> --
> > >> >>> >> >> View this message in context:
> > >> >>> >> >>
> > >> >>> >>
> > >> >>>
> > >>
> http://www.nabble.com/Is-it-possible-to-have-application-specific-properties-in-setting
> s.xml--tf3363611s177.html#a9441555
> > >> >>> >> >> Sent from the Maven - Users mailing list archive at Nabble.com.
> > >> >>> >> >>
> > >> >>> >> >>
> > >> >>> >> >>
> > >> >>> ---------------------------------------------------------------------
> > >> >>> >> >> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > >> >>> >> >> For additional commands, e-mail: users-help@maven.apache.org
> > >> >>> >> >>
> > >> >>> >> >>
> > >> >>> >> >
> > >> >>> >> >
> > >> >>> ---------------------------------------------------------------------
> > >> >>> >> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > >> >>> >> > For additional commands, e-mail: users-help@maven.apache.org
> > >> >>> >> >
> > >> >>> >> >
> > >> >>> >> >
> > >> >>> >>
> > >> >>> >> --
> > >> >>> >> View this message in context:
> > >> >>> >>
> > >> >>>
> > >>
> http://www.nabble.com/Is-it-possible-to-have-application-specific-properties-in-setting
> s.xml--tf3363611s177.html#a9444290
> > >> >>> >> Sent from the Maven - Users mailing list archive at Nabble.com.
> > >> >>> >>
> > >> >>> >>
> > >> >>> >>
> > >> ---------------------------------------------------------------------
> > >> >>> >> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > >> >>> >> For additional commands, e-mail: users-help@maven.apache.org
> > >> >>> >>
> > >> >>> >>
> > >> >>> >
> > >> >>> >
> > >> ---------------------------------------------------------------------
> > >> >>> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > >> >>> > For additional commands, e-mail: users-help@maven.apache.org
> > >> >>> >
> > >> >>> >
> > >> >>> >
> > >> >>>
> > >> >>> --
> > >> >>> View this message in context:
> > >> >>>
> > >>
> http://www.nabble.com/Is-it-possible-to-have-application-specific-properties-in-setting
> s.xml--tf3363611s177.html#a9444655
> > >> >>> Sent from the Maven - Users mailing list archive at Nabble.com.
> > >> >>>
> > >> >>>
> > >> >>> ---------------------------------------------------------------------
> > >> >>> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > >> >>> For additional commands, e-mail: users-help@maven.apache.org
> > >> >>>
> > >> >>>
> > >> >>
> > >> >> ---------------------------------------------------------------------
> > >> >> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > >> >> For additional commands, e-mail: users-help@maven.apache.org
> > >> >>
> > >> >>
> > >> >>
> > >> >
> > >> >
> > >>
> > >> --
> > >> View this message in context:
> > >>
> http://www.nabble.com/Is-it-possible-to-have-application-specific-properties-in-setting
> s.xml--tf3363611s177.html#a9466189
> > >> Sent from the Maven - Users mailing list archive at Nabble.com.
> > >>
> > >>
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > >> For additional commands, e-mail: users-help@maven.apache.org
> > >>
> > >>
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > > For additional commands, e-mail: users-help@maven.apache.org
> > >
> > >
> > >
> >
> > --
> > View this message in context:
> http://www.nabble.com/Is-it-possible-to-have-application-specific-properties-in-setting
> s.xml--tf3363611s177.html#a9468015
> > Sent from the Maven - Users mailing list archive at Nabble.com.
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > For additional commands, e-mail: users-help@maven.apache.org
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org