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" <[EMAIL PROTECTED]> To: "Maven Users List" <[email protected]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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&us > eUnicode=true&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: [EMAIL PROTECTED] > > >> >>> >> >> For additional commands, e-mail: [EMAIL PROTECTED] > > >> >>> >> >> > > >> >>> >> >> > > >> >>> >> > > > >> >>> >> > > > >> >>> --------------------------------------------------------------------- > > >> >>> >> > To unsubscribe, e-mail: [EMAIL PROTECTED] > > >> >>> >> > For additional commands, e-mail: [EMAIL PROTECTED] > > >> >>> >> > > > >> >>> >> > > > >> >>> >> > > > >> >>> >> > > >> >>> >> -- > > >> >>> >> 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: [EMAIL PROTECTED] > > >> >>> >> For additional commands, e-mail: [EMAIL PROTECTED] > > >> >>> >> > > >> >>> >> > > >> >>> > > > >> >>> > > > >> --------------------------------------------------------------------- > > >> >>> > To unsubscribe, e-mail: [EMAIL PROTECTED] > > >> >>> > For additional commands, e-mail: [EMAIL PROTECTED] > > >> >>> > > > >> >>> > > > >> >>> > > > >> >>> > > >> >>> -- > > >> >>> 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: [EMAIL PROTECTED] > > >> >>> For additional commands, e-mail: [EMAIL PROTECTED] > > >> >>> > > >> >>> > > >> >> > > >> >> --------------------------------------------------------------------- > > >> >> To unsubscribe, e-mail: [EMAIL PROTECTED] > > >> >> For additional commands, e-mail: [EMAIL PROTECTED] > > >> >> > > >> >> > > >> >> > > >> > > > >> > > > >> > > >> -- > > >> 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: [EMAIL PROTECTED] > > >> For additional commands, e-mail: [EMAIL PROTECTED] > > >> > > >> > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > -- > > 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: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
