And you know what, Google _Is_ Your Friend:

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

The follwing configuration will trigger the profile when the JDK's version
starts with "1.4" (eg. "1.4.0_08", "1.4.2_07", "1.4"):

<profiles>
 <profile>
   <activation>
     <jdk>1.4</jdk>
   </activation>
   ...
 </profile>
</profiles>

So if you are using generics (i.e. don't have to worry about jdk 1.4) you
just have the profile to add the dependency back in activated by <jdk>1.5
</jdk>

if you have to worry about 1.4, you'll need two profiles... and if, God
forbid you need to worry about 1.3, three profiles all adding it back in

On Feb 5, 2008 9:09 PM, Stephen Connolly <[EMAIL PROTECTED]>
wrote:
> profile activation based on jvm... i'll do a quick GIYF
>
>
> On Feb 5, 2008 8:53 PM, Martin Gainty <[EMAIL PROTECTED]> wrote:
> > I'll ask the dumb question..how do you do test the JVM version with
maven?
> >
> > ?
> > M-
> > ----- Original Message -----
> > From: "Stephen Connolly" <[EMAIL PROTECTED]>
> > To: "Maven Users List" <[email protected]>
> >
> > Sent: Tuesday, February 05, 2008 3:30 PM
> > Subject: Re: javax.mail and javax.activation in Java 6
> >
> >
> > > Nooooooo!
> > >
> > > don't go abusing the system path for that
> > >
> > > Go with the exclude by default and add back in if jvm is < 6
> > >
> > > On Feb 5, 2008 7:49 PM, J Douglas Donohoe <[EMAIL PROTECTED]> wrote:
> > > > Thanks for the suggestion.  That led me down the right path.  It
looks
> > like the 'system' scope is more appropriate because in this case, the
> > classes are part of the rt.jar.  I used the following profile:
> > > >
> > > >   <profiles>
> > > >     <profile>
> > > >       <id>Java 1.6</id>
> > > >       <activation>
> > > >         <jdk>1.6</jdk>
> > > >       </activation>
> > > >       <dependencies>
> > > >       <dependency>
> > > >         <groupId>javax.activation</groupId>
> > > >         <artifactId>activation</artifactId>
> > > >         <version>1.1</version>
> > > >         <scope>system</scope>
> > > >         <systemPath>${java.home}/lib/rt.jar</systemPath>
> > > >       </dependency>
> > > >       </dependencies>
> > > >     </profile>
> > > >   </profiles>
> > > >
> > > > To verify this worked, I used the following command:
> > > >
> > > > $ mvn dependency:build-classpath
> > > >
> > > > The javax.activation jar no longer appears on the classpath, but
rt.jar
> > now appears (presumably because this plugin defaults to the build
> > classpath).
> > > >
> > > > If I do:
> > > >
> > > > $ mvn dependency:build-classpath -DexcludeScope=system
> > > >
> > > > Then I get the classpath I want.
> > > >
> > > > Thanks for your help.
> > > >
> > > > One question on the use of 'system path' in dependency.  Why is this
> > necessary at all?  If it is part of the system, doesn't javac and/or
java
> > know where to find it by default?
> > > >
> > > > -Doug
> > > >
> > > > *Note:  I'm not sure the system path above will work quite right on
a
> > Mac.  It depends on how Apple decides to package things when they
release
> > 1.6.
> > > >
> > > >
> > > > ----- Original Message ----
> > > > From: Simon Kitching <[EMAIL PROTECTED]>
> > > > To: Maven Users List <[email protected]>
> > > > Cc: Doug Donohoe <[EMAIL PROTECTED]>
> > > > Sent: Tuesday, February 5, 2008 10:57:05 AM
> > > > Subject: Re: javax.mail and javax.activation in Java 6
> > > >
> > > >
> > > > ---- Doug Donohoe <[EMAIL PROTECTED]> schrieb:
> > > > > Hi Maven Community:
> > > > >
> > > > > I have added this dependency in my POM:
> > > > >
> > > > >   <dependency>
> > > > >     <groupId>javax.mail</groupId>
> > > > >     <artifactId>mail</artifactId>
> > > > >     <version>1.4.1</version>
> > > > >   </dependency>
> > > > >
> > > > > Which is retrieved from java.net using this POM definition:
> > > > >
> > > > >   <repositories>
> > > > >     <repository>
> > > > >       <id>java.net</id>
> > > > >       <url>http://download.java.net/maven/1</url>
> > > > >       <layout>legacy</layout>
> > > > >     </repository>
> > > > >   </repositories>
> > > > >
> > > > > The POM for javax.mail declares a dependency on the Java
activation
> > > > > framework.  However, I am using Java 6 (1.6.0_02), which already
> > > > > includes the activation framework.
> > > > >
> > > > > My question:  Is there a way in maven to conditionally define a
> > > > > dependency based on the JDK you are using?
> > > > >
> > > > > If there is, what is the best way for me to use such a mechanism.
> > > > > Ideally, the POM at java.net would be updated, but assuming I
can't
> > > > > figure out how to get them to update that, how do I override there
> > > >  POM?
> > > > >
> > > >
> > > > Try defining a profile called "java6" in your pom. Set its
activation
> > > >  section so it only activates for java1.6. Then in the profile
define
> > > >  that problem dependency with scope=provided.
> > > >
> > > > I think that will do the job. Dependencies declared directly in a
pom
> > > >  always override those pulled in transiently. That definitely occurs
for
> > > >  version-numbers, and I *think* it works for scope too.
> > > >
> > > > Regards,
> > > > Simon
> > > >
> > > >
> > > >
> > > >
> > >
> >
> > > ---------------------------------------------------------------------
> > > 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]
> >
> >
>

Reply via email to