maven-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Curtis Rueden <ctrue...@wisc.edu>
Subject Re: Why is "mvn validate compile" different from "mvn validate; mvn compile"?
Date Thu, 07 Nov 2013 22:40:35 GMT
Hi Alexander,

> The non-maven-jar plugin was new to me, but unfortunately it also does
> not do what I want because it expects the JAR to already exist in a
> certain place and even have a custom Maven module for it.

Why not scratch your itch: fork the non-maven-jar-maven-plugin, add support
for remote JAR locations, and submit a PR?

-Curtis


On Thu, Nov 7, 2013 at 4:13 PM, Alexander Kriegisch <
Alexander@kriegisch.name> wrote:

> Sorry, my finger slipped, sent too early...
>
>
> > Am 07.11.2013 um 23:02 schrieb Alexander Kriegisch
> <Alexander@Kriegisch.name>:
> >
> > Thanks for all your answers, I know you want to help me, but you don't.
> I know what Maven was designed to do, and I can set up an internal repo or
> nexus for myself. But imagine a situation in which all I want to have as a
> precondition for building a tiny little OSS tool with external (non-Maven
> dependencies) is a working Maven installation and one command: mvn install.
> I do not want to put the burden on my users to create their own Nexus or
> manually download dependencies and install them to the local repo. I do not
> want to execute ugly Ant tasks and not use system dependencies with fixed
> paths. I have tried all this and got every variant working without much
> fuss, but somehow all of this feels so unclean. I would much prefer to get
> it working in a declarative Maven style. The non-maven
>
> The non-maven-jar plugin was new to me, but unfortunately it also does not
> do what I want because it expects the JAR to already exist in a certain
> place and even have a custom Maven module for it. Maybe I can somehow
> combine it with the download plugin, but it seems awkward.
>
> Basically my solution with binding download and dynamic artifact
> installation to a local repo to the validate phase works nicely as long as
> I call the mvn validate separately for the very first time. Afterwards it
> is absolutely transparent because the artifacts are first class maven
> citizens after installation. The little bit of comfort missing is just a
> trick to delay artifact resolution until after dynamic installation, for
> which I hoped to get a magic Maven option or switch as a hint here on the
> user group. Thanks for bearing with me, even thanks for lecturing me about
> Maven basics I already knew by heart. I share your opinion that people not
> maintaining their artifacts on Central & Co. are indeed "bad", but hey, it
> is a real life situation I want to deal with and handle as gracefully as
> possible with as few dirty tricks as possible.
>
> I might look into creating a custom lifecycle with an additional
> pre-validate phase, if at all possible. I just fear that that hypothetic
> lifecycle will also check dependencies before starting the hypothetic
> pre-validate phase...
>
>
> >
> >
> >> Am 07.11.2013 um 22:43 schrieb Curtis Rueden <ctrueden@wisc.edu>:
> >>
> >> Hi Alexander,
> >>
> >>> do you have any suggestion how to solve this problem in a clean,
> >>> canonical Maven way, given a single condition: no private Nexus or
> >>> external Maven repo is available and I want one-stop shopping and
> >>> clean bootstrapping right from Maven.
> >>
> >> The blog post linked earlier answers exactly this question.
> >>
> >> The solutions it outlines to this problem are, in order of "best for the
> >> Maven community to worst for the Maven community":
> >>
> >> 1.Get thee to Central
> >> 2. Get the external jars into a public Maven repository
> >> 3. Get the external jars into the internal Maven repository
> >> 4. Use the reactor (and Stephen's non-maven-jar plugin)
> >> 5. Use an ANT task
> >> [Everything after this point is "Donny Don't".]
> >> 6. The file:///${basedir} repository hack
> >> 7. The system scope hack
> >>
> >> Options 1 & 2 require communication with the third party library
> >> developers, which presumably is untenable for you. You have also
> rejected
> >> #3 ("I kinda dislike manually uploading external JARs there"), which
> leaves
> >> #4 as your next-best option.
> >>
> >> Regards,
> >> Curtis
> >>
> >> P.S. I am intrigued by your current solution, since it doesn't even
> appear
> >> on Stephen's list, but I am guessing it would fall under the "Donny
> Don't"
> >> section. The non-maven-jar plugin is a more integrated way of doing what
> >> you are trying to do.
> >>
> >>
> >> On Thu, Nov 7, 2013 at 3:29 PM, Alexander Kriegisch <
> >> Alexander@kriegisch.name> wrote:
> >>
> >>> I have never used Ant, so I do nkt have the urge to script my build. I
> >>> have also read the blog post you mentioned. The JARs I was trying to
> >>> dynamically download from. "non-Maven" URL are, as I said
> >>>
> >>> - not available on Central (I suggested it to the author, but he
> refused
> >>>   and keeps committing all dependencies to his SCM)
> >>>
> >>> - not available on any other public Maven repo
> >>>
> >>> - not even built with Maven.
> >>>
> >>> Our company even has an internal Nexus, but
> >>>
> >>> - I kinda dislike manually uploading external JARs there
> >>>
> >>> - I was in a situation where I did not have access to that Nexus
> instance
> >>>   and wondered if it was not somehow possible to bootstrap external
> >>>   JARs directly with Maven. Thus, I ended up using the combination of
> >>>   download-maven-plugin and maven-install-plugin, both tied to the
> first
> >>>   phase available, named validate. This works nicely if I call validate
> >>>   separately, but I wanted to do it Maven style in one call. I think it
> >>> is a
> >>>   design flaw in Maven that it behaves differently for validate
> >>> depending on
> >>>   which phase has been called. I think the principle of least surprise
> >>> makes
> >>>   users expect a different (consistent) behaviour. I do not see any
> >>> problems
> >>>   In an approach which executes validate before checking the downloads
> >>>   needed for compile.
> >>>
> >>> Having said that and further explained my situation, do you have any
> >>> suggestion how to solve this problem in a clean, canonical Maven way,
> given
> >>> a single condition: no private Nexus or external Maven repo is
> available
> >>> and I want one-stop shopping and clean bootstrapping right from Maven.
> I
> >>> think this is a simple enough and understandable requirement. It is
> >>> actually what I have started using Maven for.
> >>>
> >>>
> >>>> Am 07.11.2013 um 21:23 schrieb Doug Douglass <douglass.doug@gmail.com
> >:
> >>>>
> >>>> On Thu, Nov 7, 2013 at 12:41 PM, Alexander Kriegisch <
> >>>> Alexander@kriegisch.name> wrote:
> >>>>
> >>>>> Only "mvn compile" yields the exact same result as "mvn validate
> >>> compile",
> >>>>> I just did it like this explicitly to make a point and show clearly
> what
> >>>>> hapens. So again: Why, pray tell, does my two-phase build work if
> first
> >>> I
> >>>>> only do "mvn validate" and then "mvn compile", but not with only
"mvn
> >>>>> compile"? The question is still unanswered. Two people told me I
> made a
> >>>>> mistake but did not explain which one and where the different
> behaviour
> >>>>> comes from.
> >>>> You're right, I didn't answer your original question. The different
is
> >>>> because "mvn validate compile" and/or "mvn compile" is a single
> >>> invocation
> >>>> of maven and dependencies are resolved once (by default, w/o any other
> >>>> plugins/configuration). "mvn validate; mvn compile" are 2 separate
> >>>> invocations of maven; the first one does your "download external,
> >>>> non-mavenised" business, which makes those dependencies available for
> the
> >>>> second.
> >>>>
> >>>> I still suggest you read Steven's post as you're question/problem
> >>> indicates
> >>>> you're heading down the not-uncommon path of trying to script your
> build
> >>>> (like we all did in the Ant days) vs. giving into The Maven Way.
> There's
> >>>> lots of similar conversations in the list archives, the blog post is
> the
> >>>> result of many such "debates". I'll apologize in advance if this is
> not
> >>>> your case.
> >>>>
> >>>> Cheers,
> >>>> Doug
> >>>
> >>> ---------------------------------------------------------------------
> >>> 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
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message