> From: ctrue...@wisc.edu > Date: Thu, 5 Feb 2015 15:11:34 -0600 > Subject: Re: How to activate a profile when -offline? > To: users@maven.apache.org > > Hi Andreas, > > > Now, one might argue that the m-jarsigner-p needs to become smarter > > and aware of Maven's offline mode, but that would require it to deal > > with special cases, like localhost URLs being reachable even in > > offline mode > > I would argue that, yeah. And that it should ignore such special cases, and > just do nothing (or fail the build maybe) when in offline mode. Though > special casing "file://" would be trivial to do. Maybe worth filing a JIRA > issue for it? Doesn't look like there are any issues relating to this in > the system yet [1]. > > > being able to activate a profile on ${settings.offline} doesn't > > preclude that as, AFAIK, that magic property can only be set before > > Maven "starts doing things like resolving parent POMs", i.e., on the > > command line or in the settings.xml itself. > > Sure, that makes sense to me too. After all, settings.xml is always there > on the local machine and intuitively, it seems like it would be easy to add > support for profile activation based on settings. But I am naive there! > > Regards, > Curtis > > [1] > https://jira.codehaus.org/issues/?jql=project%20%3D%20MJARSIGNER%20AND%20text%20~%20offline > > On Thu, Feb 5, 2015 at 3:05 PM, Andreas Sewe < > s...@st.informatik.tu-darmstadt.de> wrote: > > > Hi Curtis, > > > > many thanks for your detailed reply. > > > > You wrote: > > >> Is this by design, i.e., is ${settings.offline} different from, > > >> say, a property ${my.offline} that I activate with -D? > > > > > > For better or for worse, Maven profiles cannot be activated based on > > Maven > > > properties, only based on Java system properties and/or environment > > > variables. That is, anything you pass in via -Dfoo.bar can be used for > > > activation, but all those properties you put in the <properties> section > > of > > > your POM, or in settings.xml, cannot trigger profiles. The Maven offline > > > property is one of the latter, not the former. > > > > Yes, but settings.offline is arguably different from things in a > > properties section because it is, as you point out below, a top-level > > element in settings.xml (/settings/offline rather than > > /settings/properties/offline). As such, it at least seems plausible that > > settings.* properties act the same as env.* properties. > > > > >> does there exist a different way to achieve the same thing, > > >> i.e., activate a profile when -offline? > > > > > > After 30+ minutes of thinking about this and trying things and grepping > > > Maven source code, I do not think what you want to do is obviously > > possible. > > > > > > Pragmatically, I thought maybe you could enable offline mode using a > > > profile in your settings.xml activated on an environment variable, but > > you > > > cannot toggle the offline setting in such a profile, because <offline> > > is a > > > toplevel element (i.e., not declared beneath <properties>). > > > > Maybe I phrased my original question not clearly enough: I don't want to > > *enable* offline mode. I simply want to configure some plugin (the > > maven-jarsigner-plugin's <tsa> configuration option, to be precise) iff > > I am running Maven with -offline. The problem is that, with a Time > > Stamping Authority URL configured, the m-jarsigner-p tries to connect to > > the TSA, even if -offline, which cannot succeed and causes the build to > > fail. > > > > Now, one might argue that the m-jarsigner-p needs to become smarter and > > aware of Maven's offline mode, but that would require it to deal with > > special cases, like localhost URLs being reachable even in offline mode, > > etc. IMHO, it is thus far simpler to just be able to configure an > > "offline" profile that adapts your plugin configurations if -offline is > > used. > > > > > The greater design issue is that Maven needs to know whether it is > > offline > > > mode before it starts doing things like resolving parent POMs. But that > > > resolution is necessary in order to fully interpolate the POM and hence > > > know which profiles are activated. > > > > I get that. But being able to activate a profile on ${settings.offline} > > doesn't preclude that as, AFAIK, that magic property can only be set > > before Maven "starts doing things like resolving parent POMs", i.e., on > > the command line or in the settings.xml itself. > > > > Do you agree? If so, do you think this might be worth an enhancement > > request? (I think the m-jarsigner-p use case is pretty compelling, but > > then again that's the problem I am facing at work right now, so I may be > > a bit biased. ;-) > > > > Best wishes, > > > > Andreas > > MG>Andreas/Curtis MG>you can bind to different phases depending on value of requiresOnline e.g.
<?xml version="1.0" encoding="UTF-8"?> <plugin> <name>AspectJ compiler Maven Plugin</name> <description>Handles AspectJ usage within Maven. Functionality provided is: weaving of aspects (or existing aspects from libraries) with the test and/or main classes, weaving of pre-existing jars and ajdoc reporting.</description> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.4</version> <goalPrefix>aspectj</goalPrefix> <isolatedRealm>false</isolatedRealm> <inheritedByDefault>true</inheritedByDefault> <mojos> <mojo> <goal>test-compile</goal> <description>Weaves all test classes.</description> <requiresOnline>false</requiresOnline> <phase>test-compile</phase> ................ </mojo> <mojo> <goal>compile</goal> <description>Weaves all regular classes.</description> <requiresOnline>true</requiresOnline> <phase>compile</phase> ................ </mojo> </mojos> </plugin> this implementation will always resolve during compile phase for offline/online but will fail the build if offline during test-compile phase MG>? > >