You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by David Hoffer <dh...@gmail.com> on 2009/08/04 16:25:37 UTC

How to create patched artifact?

What is the maven way of creating a patched jar?

I have a case where I need to apply some overrides to a binary jar which is
one of my dependencies.  I have the source code for the overrides.  So I
could create a child module with the source and the one dependency that
needs the overrides applied.  What maven plugin would I use to extract the
class files from the dependency, combine with the new generated classes from
source, and then re-jar?  The final artifact would have a new name, i.e.
_patched, so as to not get confused with the original.  How can I then stop
the transitive dependency on the original jar?  I would want the dependency
to be on the new patched version only.

What's the maven way of doing this sort of thing?

-Dave

Re: How to create patched artifact?

Posted by Brian Fox <br...@infinity.nu>.
>
> Bleh, I still think it's awful, it reads like it was written by a cyborg.  :-)
>
> If I'm going to "unpack" something, I'm going to expect that
> "overwrite" would allow me to control whether or not the process of
> unpacking was going to be destructive to existing files or not.
> That's the conundrum here, I see not other way than excludes to do
> this overlay without replacing files that already exist.


Possibly, but this use case simply wasn't included originally but if
someone writes a patch, i will apply it right away. In fact when I
originally wrote unpack it was to get war overlay support and in this
case i definately wanted to overwrite everything from the war that was
contained in what I unpacked. The war plugin was looking at each file
and it actually broke my use case. To each their own ;-)

>
> The alternative would be to set staleMillis on the compiler plugin to
> a value that would always force a compile, but StaleSourceScanner
> doesn't support anything like staleMillis = -1.
>
>>
>> On Tue, Aug 4, 2009 at 4:28 PM, Tim O'Brien<to...@discursive.com> wrote:
>>> I love it how you are so close to the code, you think that this is
>>> sufficient documentation for a plugin goal configuration property on
>>> unpack:
>>>
>>> Property: overWriteIfNewer
>>> Documentation: Overwrite if newer
>>>
>>> :-)
>>>
>>> Like I said, that leave a lot to be desired.
>>>
>>> On Tue, Aug 4, 2009 at 3:19 PM, Brian Fox<br...@infinity.nu> wrote:
>>>> On Tue, Aug 4, 2009 at 3:30 PM, Tim O'Brien<to...@discursive.com> wrote:
>>>>> Use the excludes config property to exclude the specific files you
>>>>> don't want to overwrite.
>>>>>
>>>>> http://maven.apache.org/plugins/maven-dependency-plugin/unpack-mojo.html
>>>>>
>>>>> The docs on that mojo leave much to be desired.
>>>>>
>>>>
>>>> Oh come on, the dependency plugin is very well documented. It's just
>>>> got a lot of options so it's non-trivial.
>>>>
>>>> ---------------------------------------------------------------------
>>>> 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
>>
>>
>
> ---------------------------------------------------------------------
> 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


Re: How to create patched artifact?

Posted by Tim O'Brien <to...@discursive.com>.
On Tue, Aug 4, 2009 at 3:37 PM, Brian Fox<br...@infinity.nu> wrote:
> That stuff is generated from the javadoc annotations. Take a look at
> the usage page:
>
> http://maven.apache.org/plugins/maven-dependency-plugin/usage.html#Overwrite%20Rules
>
> Overwrite Rules
>
> Artifacts are copied or unpacked using the following rules:
>
>    * If the artifact doesn't exist in the destination, then copy/unpack it.
>
>      Otherwise:
>    * For copy/unpack mojo only: if artifactItem / overWrite or
> overWrite is true, then it will force an overwrite.
>    * Releases check the overWriteReleases value (default = false). If
> true, then it will force an overwrite.
>    * Snapshots check the overWriteSnapshots value (default = false).
> If true, then it will force an overwrite.
>    * If none of the above is set to true, then it defaults to the
> overWriteIfNewer value (default = true). This value, if true, causes
> the plugin to only copy if the source is newer than the destination
> (or it doesn't exist in the destination). (for unpack, this checks the
> existence of the marker file, created in the markersDirectory path. To
> avoid unexpected behavior after mvn clean, this path should normally
> be contained within the /target hierarchy.)
>
> Examples:
>
>    * Using the default settings (overWriteReleases = false,
> overWriteSnapshots = false, overWriteIfNewer = true), then a release
> or snapshot artifact will only over write the destination if the
> source is newer than the destination (or marker file if unpacking).
>    * If overWriteReleases = true, then a release artifact (ie
> foo-1.0.jar) will always overwrite.
>    * If overWriteSnapshots = true, then a snapshot artifact (ie
> foo-1.0-SNAPSHOT.jar) will always overwrite.
>    * If all of the values are false, then a copy/unpack will only
> occur if it doesn't exist in the destination (or markersDirectory if
> unpacking).
>
>
> So I again assert that for a plugin the documentation is good.
>

Bleh, I still think it's awful, it reads like it was written by a cyborg.  :-)

If I'm going to "unpack" something, I'm going to expect that
"overwrite" would allow me to control whether or not the process of
unpacking was going to be destructive to existing files or not.
That's the conundrum here, I see not other way than excludes to do
this overlay without replacing files that already exist.

The alternative would be to set staleMillis on the compiler plugin to
a value that would always force a compile, but StaleSourceScanner
doesn't support anything like staleMillis = -1.

>
> On Tue, Aug 4, 2009 at 4:28 PM, Tim O'Brien<to...@discursive.com> wrote:
>> I love it how you are so close to the code, you think that this is
>> sufficient documentation for a plugin goal configuration property on
>> unpack:
>>
>> Property: overWriteIfNewer
>> Documentation: Overwrite if newer
>>
>> :-)
>>
>> Like I said, that leave a lot to be desired.
>>
>> On Tue, Aug 4, 2009 at 3:19 PM, Brian Fox<br...@infinity.nu> wrote:
>>> On Tue, Aug 4, 2009 at 3:30 PM, Tim O'Brien<to...@discursive.com> wrote:
>>>> Use the excludes config property to exclude the specific files you
>>>> don't want to overwrite.
>>>>
>>>> http://maven.apache.org/plugins/maven-dependency-plugin/unpack-mojo.html
>>>>
>>>> The docs on that mojo leave much to be desired.
>>>>
>>>
>>> Oh come on, the dependency plugin is very well documented. It's just
>>> got a lot of options so it's non-trivial.
>>>
>>> ---------------------------------------------------------------------
>>> 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
>
>

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


Re: How to create patched artifact?

Posted by Brian Fox <br...@infinity.nu>.
That stuff is generated from the javadoc annotations. Take a look at
the usage page:

http://maven.apache.org/plugins/maven-dependency-plugin/usage.html#Overwrite%20Rules

Overwrite Rules

Artifacts are copied or unpacked using the following rules:

    * If the artifact doesn't exist in the destination, then copy/unpack it.

      Otherwise:
    * For copy/unpack mojo only: if artifactItem / overWrite or
overWrite is true, then it will force an overwrite.
    * Releases check the overWriteReleases value (default = false). If
true, then it will force an overwrite.
    * Snapshots check the overWriteSnapshots value (default = false).
If true, then it will force an overwrite.
    * If none of the above is set to true, then it defaults to the
overWriteIfNewer value (default = true). This value, if true, causes
the plugin to only copy if the source is newer than the destination
(or it doesn't exist in the destination). (for unpack, this checks the
existence of the marker file, created in the markersDirectory path. To
avoid unexpected behavior after mvn clean, this path should normally
be contained within the /target hierarchy.)

Examples:

    * Using the default settings (overWriteReleases = false,
overWriteSnapshots = false, overWriteIfNewer = true), then a release
or snapshot artifact will only over write the destination if the
source is newer than the destination (or marker file if unpacking).
    * If overWriteReleases = true, then a release artifact (ie
foo-1.0.jar) will always overwrite.
    * If overWriteSnapshots = true, then a snapshot artifact (ie
foo-1.0-SNAPSHOT.jar) will always overwrite.
    * If all of the values are false, then a copy/unpack will only
occur if it doesn't exist in the destination (or markersDirectory if
unpacking).


So I again assert that for a plugin the documentation is good.


On Tue, Aug 4, 2009 at 4:28 PM, Tim O'Brien<to...@discursive.com> wrote:
> I love it how you are so close to the code, you think that this is
> sufficient documentation for a plugin goal configuration property on
> unpack:
>
> Property: overWriteIfNewer
> Documentation: Overwrite if newer
>
> :-)
>
> Like I said, that leave a lot to be desired.
>
> On Tue, Aug 4, 2009 at 3:19 PM, Brian Fox<br...@infinity.nu> wrote:
>> On Tue, Aug 4, 2009 at 3:30 PM, Tim O'Brien<to...@discursive.com> wrote:
>>> Use the excludes config property to exclude the specific files you
>>> don't want to overwrite.
>>>
>>> http://maven.apache.org/plugins/maven-dependency-plugin/unpack-mojo.html
>>>
>>> The docs on that mojo leave much to be desired.
>>>
>>
>> Oh come on, the dependency plugin is very well documented. It's just
>> got a lot of options so it's non-trivial.
>>
>> ---------------------------------------------------------------------
>> 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


Re: How to create patched artifact?

Posted by Tim O'Brien <to...@discursive.com>.
I love it how you are so close to the code, you think that this is
sufficient documentation for a plugin goal configuration property on
unpack:

Property: overWriteIfNewer
Documentation: Overwrite if newer

:-)

Like I said, that leave a lot to be desired.

On Tue, Aug 4, 2009 at 3:19 PM, Brian Fox<br...@infinity.nu> wrote:
> On Tue, Aug 4, 2009 at 3:30 PM, Tim O'Brien<to...@discursive.com> wrote:
>> Use the excludes config property to exclude the specific files you
>> don't want to overwrite.
>>
>> http://maven.apache.org/plugins/maven-dependency-plugin/unpack-mojo.html
>>
>> The docs on that mojo leave much to be desired.
>>
>
> Oh come on, the dependency plugin is very well documented. It's just
> got a lot of options so it's non-trivial.
>
> ---------------------------------------------------------------------
> 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


Re: How to create patched artifact?

Posted by Brian Fox <br...@infinity.nu>.
On Tue, Aug 4, 2009 at 3:30 PM, Tim O'Brien<to...@discursive.com> wrote:
> Use the excludes config property to exclude the specific files you
> don't want to overwrite.
>
> http://maven.apache.org/plugins/maven-dependency-plugin/unpack-mojo.html
>
> The docs on that mojo leave much to be desired.
>

Oh come on, the dependency plugin is very well documented. It's just
got a lot of options so it's non-trivial.

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


Re: How to create patched artifact?

Posted by Tim O'Brien <to...@discursive.com>.
Use the excludes config property to exclude the specific files you
don't want to overwrite.

http://maven.apache.org/plugins/maven-dependency-plugin/unpack-mojo.html

The docs on that mojo leave much to be desired.

On Tue, Aug 4, 2009 at 2:10 PM, David Hoffer<dh...@gmail.com> wrote:
> Perhaps I'm not clear what you are suggesting.  I'm not trying to do a
> release, I'm trying to use a snapshot (that a different division at our
> company produces).  However I need to make a few overrides to this
> snapshot.  yes we do have a process to move our overrides into the
> snapshot...but that process takes some time.  In the meantime I have to
> build with the snapshot as it exists.
>
> So what I am trying to do is simply unpack the snapshot, compile/replace
> classes with my overrides, and re-jar.  I have chosen to rename the jar so
> there is no risk of confusing which jar is patched.
>
> yes we use a repository manager, all builds get deployed to it.
>
> -Dave
>
> On Tue, Aug 4, 2009 at 1:01 PM, <ji...@gmail.com> wrote:
>
>> Hi David,
>>
>> If you have all the source code, as you seem to suggest several times
>> in this convoluted post, then why don't you just deploy a new
>> -SNAPSHOT yourself to your local repository? You ARE using a
>> repository manager, right??
>>
>>
>> http://www.sonatype.com/people/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/
>>
>> -jesse
>>
>> On Tue, Aug 4, 2009 at 10:25 AM, David Hoffer<dh...@gmail.com> wrote:
>> > What is the maven way of creating a patched jar?
>> >
>> > I have a case where I need to apply some overrides to a binary jar which
>> is
>> > one of my dependencies.  I have the source code for the overrides.  So I
>> > could create a child module with the source and the one dependency that
>> > needs the overrides applied.  What maven plugin would I use to extract
>> the
>> > class files from the dependency, combine with the new generated classes
>> from
>> > source, and then re-jar?  The final artifact would have a new name, i.e.
>> > _patched, so as to not get confused with the original.  How can I then
>> stop
>> > the transitive dependency on the original jar?  I would want the
>> dependency
>> > to be on the new patched version only.
>> >
>> > What's the maven way of doing this sort of thing?
>> >
>> > -Dave
>> >
>>
>>
>>
>> --
>> There are 10 types of people in this world, those
>> that can read binary and those that can not.
>>
>> ---------------------------------------------------------------------
>> 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


Re: How to create patched artifact?

Posted by Brian Fox <br...@infinity.nu>.
FWIW, the dependency plugin is looking at a marker file stored in
/target/dependencies to determine if a jar needs to be unpacked again.
It compares the timestamp of the jar with the timestamp of the marker
to determine newness. Once it decides to unpack a jar, it unpacks
_all_ files in there, not just newer ones.

On Tue, Aug 4, 2009 at 4:22 PM, Brian Fox<br...@infinity.nu> wrote:
> Late to the thread here, but why are you unpacking this patched jar?
> Why not just deploy it to your repo manager and update your poms to
> depend on it?
>
> On Tue, Aug 4, 2009 at 3:10 PM, David Hoffer<dh...@gmail.com> wrote:
>> Perhaps I'm not clear what you are suggesting.  I'm not trying to do a
>> release, I'm trying to use a snapshot (that a different division at our
>> company produces).  However I need to make a few overrides to this
>> snapshot.  yes we do have a process to move our overrides into the
>> snapshot...but that process takes some time.  In the meantime I have to
>> build with the snapshot as it exists.
>>
>> So what I am trying to do is simply unpack the snapshot, compile/replace
>> classes with my overrides, and re-jar.  I have chosen to rename the jar so
>> there is no risk of confusing which jar is patched.
>>
>> yes we use a repository manager, all builds get deployed to it.
>>
>> -Dave
>>
>> On Tue, Aug 4, 2009 at 1:01 PM, <ji...@gmail.com> wrote:
>>
>>> Hi David,
>>>
>>> If you have all the source code, as you seem to suggest several times
>>> in this convoluted post, then why don't you just deploy a new
>>> -SNAPSHOT yourself to your local repository? You ARE using a
>>> repository manager, right??
>>>
>>>
>>> http://www.sonatype.com/people/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/
>>>
>>> -jesse
>>>
>>> On Tue, Aug 4, 2009 at 10:25 AM, David Hoffer<dh...@gmail.com> wrote:
>>> > What is the maven way of creating a patched jar?
>>> >
>>> > I have a case where I need to apply some overrides to a binary jar which
>>> is
>>> > one of my dependencies.  I have the source code for the overrides.  So I
>>> > could create a child module with the source and the one dependency that
>>> > needs the overrides applied.  What maven plugin would I use to extract
>>> the
>>> > class files from the dependency, combine with the new generated classes
>>> from
>>> > source, and then re-jar?  The final artifact would have a new name, i.e.
>>> > _patched, so as to not get confused with the original.  How can I then
>>> stop
>>> > the transitive dependency on the original jar?  I would want the
>>> dependency
>>> > to be on the new patched version only.
>>> >
>>> > What's the maven way of doing this sort of thing?
>>> >
>>> > -Dave
>>> >
>>>
>>>
>>>
>>> --
>>> There are 10 types of people in this world, those
>>> that can read binary and those that can not.
>>>
>>> ---------------------------------------------------------------------
>>> 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


Re: How to create patched artifact?

Posted by David Hoffer <dh...@gmail.com>.
I'm not unpacking a patched jar, rather I'm unpacking the original
jar...trying to create a patched jar if I could only get the unpack to work
correctly. :)

-Dave

On Tue, Aug 4, 2009 at 2:22 PM, Brian Fox <br...@infinity.nu> wrote:

> Late to the thread here, but why are you unpacking this patched jar?
> Why not just deploy it to your repo manager and update your poms to
> depend on it?
>
> On Tue, Aug 4, 2009 at 3:10 PM, David Hoffer<dh...@gmail.com> wrote:
> > Perhaps I'm not clear what you are suggesting.  I'm not trying to do a
> > release, I'm trying to use a snapshot (that a different division at our
> > company produces).  However I need to make a few overrides to this
> > snapshot.  yes we do have a process to move our overrides into the
> > snapshot...but that process takes some time.  In the meantime I have to
> > build with the snapshot as it exists.
> >
> > So what I am trying to do is simply unpack the snapshot, compile/replace
> > classes with my overrides, and re-jar.  I have chosen to rename the jar
> so
> > there is no risk of confusing which jar is patched.
> >
> > yes we use a repository manager, all builds get deployed to it.
> >
> > -Dave
> >
> > On Tue, Aug 4, 2009 at 1:01 PM, <ji...@gmail.com> wrote:
> >
> >> Hi David,
> >>
> >> If you have all the source code, as you seem to suggest several times
> >> in this convoluted post, then why don't you just deploy a new
> >> -SNAPSHOT yourself to your local repository? You ARE using a
> >> repository manager, right??
> >>
> >>
> >>
> http://www.sonatype.com/people/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/
> >>
> >> -jesse
> >>
> >> On Tue, Aug 4, 2009 at 10:25 AM, David Hoffer<dh...@gmail.com>
> wrote:
> >> > What is the maven way of creating a patched jar?
> >> >
> >> > I have a case where I need to apply some overrides to a binary jar
> which
> >> is
> >> > one of my dependencies.  I have the source code for the overrides.  So
> I
> >> > could create a child module with the source and the one dependency
> that
> >> > needs the overrides applied.  What maven plugin would I use to extract
> >> the
> >> > class files from the dependency, combine with the new generated
> classes
> >> from
> >> > source, and then re-jar?  The final artifact would have a new name,
> i.e.
> >> > _patched, so as to not get confused with the original.  How can I then
> >> stop
> >> > the transitive dependency on the original jar?  I would want the
> >> dependency
> >> > to be on the new patched version only.
> >> >
> >> > What's the maven way of doing this sort of thing?
> >> >
> >> > -Dave
> >> >
> >>
> >>
> >>
> >> --
> >> There are 10 types of people in this world, those
> >> that can read binary and those that can not.
> >>
> >> ---------------------------------------------------------------------
> >> 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
>
>

Re: How to create patched artifact?

Posted by Brian Fox <br...@infinity.nu>.
Late to the thread here, but why are you unpacking this patched jar?
Why not just deploy it to your repo manager and update your poms to
depend on it?

On Tue, Aug 4, 2009 at 3:10 PM, David Hoffer<dh...@gmail.com> wrote:
> Perhaps I'm not clear what you are suggesting.  I'm not trying to do a
> release, I'm trying to use a snapshot (that a different division at our
> company produces).  However I need to make a few overrides to this
> snapshot.  yes we do have a process to move our overrides into the
> snapshot...but that process takes some time.  In the meantime I have to
> build with the snapshot as it exists.
>
> So what I am trying to do is simply unpack the snapshot, compile/replace
> classes with my overrides, and re-jar.  I have chosen to rename the jar so
> there is no risk of confusing which jar is patched.
>
> yes we use a repository manager, all builds get deployed to it.
>
> -Dave
>
> On Tue, Aug 4, 2009 at 1:01 PM, <ji...@gmail.com> wrote:
>
>> Hi David,
>>
>> If you have all the source code, as you seem to suggest several times
>> in this convoluted post, then why don't you just deploy a new
>> -SNAPSHOT yourself to your local repository? You ARE using a
>> repository manager, right??
>>
>>
>> http://www.sonatype.com/people/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/
>>
>> -jesse
>>
>> On Tue, Aug 4, 2009 at 10:25 AM, David Hoffer<dh...@gmail.com> wrote:
>> > What is the maven way of creating a patched jar?
>> >
>> > I have a case where I need to apply some overrides to a binary jar which
>> is
>> > one of my dependencies.  I have the source code for the overrides.  So I
>> > could create a child module with the source and the one dependency that
>> > needs the overrides applied.  What maven plugin would I use to extract
>> the
>> > class files from the dependency, combine with the new generated classes
>> from
>> > source, and then re-jar?  The final artifact would have a new name, i.e.
>> > _patched, so as to not get confused with the original.  How can I then
>> stop
>> > the transitive dependency on the original jar?  I would want the
>> dependency
>> > to be on the new patched version only.
>> >
>> > What's the maven way of doing this sort of thing?
>> >
>> > -Dave
>> >
>>
>>
>>
>> --
>> There are 10 types of people in this world, those
>> that can read binary and those that can not.
>>
>> ---------------------------------------------------------------------
>> 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


Re: How to create patched artifact?

Posted by David Hoffer <dh...@gmail.com>.
Perhaps I'm not clear what you are suggesting.  I'm not trying to do a
release, I'm trying to use a snapshot (that a different division at our
company produces).  However I need to make a few overrides to this
snapshot.  yes we do have a process to move our overrides into the
snapshot...but that process takes some time.  In the meantime I have to
build with the snapshot as it exists.

So what I am trying to do is simply unpack the snapshot, compile/replace
classes with my overrides, and re-jar.  I have chosen to rename the jar so
there is no risk of confusing which jar is patched.

yes we use a repository manager, all builds get deployed to it.

-Dave

On Tue, Aug 4, 2009 at 1:01 PM, <ji...@gmail.com> wrote:

> Hi David,
>
> If you have all the source code, as you seem to suggest several times
> in this convoluted post, then why don't you just deploy a new
> -SNAPSHOT yourself to your local repository? You ARE using a
> repository manager, right??
>
>
> http://www.sonatype.com/people/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/
>
> -jesse
>
> On Tue, Aug 4, 2009 at 10:25 AM, David Hoffer<dh...@gmail.com> wrote:
> > What is the maven way of creating a patched jar?
> >
> > I have a case where I need to apply some overrides to a binary jar which
> is
> > one of my dependencies.  I have the source code for the overrides.  So I
> > could create a child module with the source and the one dependency that
> > needs the overrides applied.  What maven plugin would I use to extract
> the
> > class files from the dependency, combine with the new generated classes
> from
> > source, and then re-jar?  The final artifact would have a new name, i.e.
> > _patched, so as to not get confused with the original.  How can I then
> stop
> > the transitive dependency on the original jar?  I would want the
> dependency
> > to be on the new patched version only.
> >
> > What's the maven way of doing this sort of thing?
> >
> > -Dave
> >
>
>
>
> --
> There are 10 types of people in this world, those
> that can read binary and those that can not.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>

Re: How to create patched artifact?

Posted by ji...@gmail.com.
Hi David,

If you have all the source code, as you seem to suggest several times
in this convoluted post, then why don't you just deploy a new
-SNAPSHOT yourself to your local repository? You ARE using a
repository manager, right??

http://www.sonatype.com/people/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/

-jesse

On Tue, Aug 4, 2009 at 10:25 AM, David Hoffer<dh...@gmail.com> wrote:
> What is the maven way of creating a patched jar?
>
> I have a case where I need to apply some overrides to a binary jar which is
> one of my dependencies.  I have the source code for the overrides.  So I
> could create a child module with the source and the one dependency that
> needs the overrides applied.  What maven plugin would I use to extract the
> class files from the dependency, combine with the new generated classes from
> source, and then re-jar?  The final artifact would have a new name, i.e.
> _patched, so as to not get confused with the original.  How can I then stop
> the transitive dependency on the original jar?  I would want the dependency
> to be on the new patched version only.
>
> What's the maven way of doing this sort of thing?
>
> -Dave
>



-- 
There are 10 types of people in this world, those
that can read binary and those that can not.

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


Re: How to create patched artifact?

Posted by Tim O'Brien <to...@discursive.com>.
On Tue, Aug 4, 2009 at 1:27 PM, Anders Hammar<an...@hammar.net> wrote:
> Tim,
>
>> 4. Package, publish your new patched artifact to a repository manager
>> (under a new groupId, artifactId, version).
>>
>> The key here is that you create a project that patches the original
>> artifact and then publishes it under a different GAV coordinate.   I
>> would not recommend patching the JAR and then writing it back to the
>> repository manager under the same GAV coordinate: 1. You are going to
>> have a GAV collision, and 2. It makes it difficult to update to a new
>> version of this binary dependency.
>
> Is it really best practise to change groupId and artifactId? I would
> only change the version so that Maven has a chance to detect
> collisions. Similar to what Brian recommends for converting a SNAPSHOT
> version to a release version in this blog entry (see rule #5):
> http://www.sonatype.com/people/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/
>


If it is something that is public, yes, only change the version.   I
was assuming this was some gnarly internal binary that someone handed
to him because that's what has happened to me in the past.    Example:
you work on a system that depends on some proprietary, source-less JAR
binary.  In that case, I'd wrap it with my own GAV and call it a day.
  But, you are right, if you are patching something like commons-lang
or plexus-utils, you would totally preserve the GA and change the V.

> /Anders
>
> ---------------------------------------------------------------------
> 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


Re: How to create patched artifact?

Posted by Anders Hammar <an...@hammar.net>.
Tim,

> 4. Package, publish your new patched artifact to a repository manager
> (under a new groupId, artifactId, version).
>
> The key here is that you create a project that patches the original
> artifact and then publishes it under a different GAV coordinate.   I
> would not recommend patching the JAR and then writing it back to the
> repository manager under the same GAV coordinate: 1. You are going to
> have a GAV collision, and 2. It makes it difficult to update to a new
> version of this binary dependency.

Is it really best practise to change groupId and artifactId? I would
only change the version so that Maven has a chance to detect
collisions. Similar to what Brian recommends for converting a SNAPSHOT
version to a release version in this blog entry (see rule #5):
http://www.sonatype.com/people/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/

/Anders

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


Re: How to create patched artifact?

Posted by David Hoffer <dh...@gmail.com>.
To resolve the overwrite issue I thought I would attach the
maven-dependency-plugin to the process-classes phase so it happens after the
compile.  I then set its overWrite, overWriteReleases & overWriteSnapshots
tags to false so it would not overwrite the just compiled output.  But it
doesn't work, it still overwrites.  So I'm back at square 1.

-Dave

On Tue, Aug 4, 2009 at 12:25 PM, David Hoffer <dh...@gmail.com> wrote:

> Yeah, I meant install phase.  My pom's packaging is jar, and I have the
> source in src/main/java.
>
> It seems to find the source because for new files I do find the compiled
> classes in the right places.  However what I also find is that for classes
> in the dependent jar they seem to have overwrote the compiled ones.
>
> I think what is happening is that during the compile phase it simply skips
> the compile (or at least the writing of the class file to disk) if it
> already exists.  How can I configure the compile to always overwrite?
>
> -Dave
>
>
> On Tue, Aug 4, 2009 at 12:10 PM, Tim O'Brien <to...@discursive.com>wrote:
>
>> On Tue, Aug 4, 2009 at 1:01 PM, David Hoffer<dh...@gmail.com> wrote:
>> > Hum,
>> >
>> > I'm getting close but not quite there yet.  Here is my configuration.
>> >
>> > <plugin>
>> >                <groupId>org.apache.maven.plugins</groupId>
>> >                <artifactId>maven-dependency-plugin</artifactId>
>> >                <executions>
>> >                    <execution>
>> >                        <id>unpack</id>
>> >                        <phase>generate-sources</phase>
>> >                        <goals>
>> >                            <goal>unpack</goal>
>> >                        </goals>
>> >                        <configuration>
>> >                            <artifactItems>
>> >                                <artifactItem>
>> >                                    <groupId>wt</groupId>
>> >                                    <artifactId>wt</artifactId>
>> >                                    <version>4.0-SNAPSHOT</version>
>> >                                    <type>jar</type>
>> >                                    <overWrite>true</overWrite>
>> >
>> > <outputDirectory>${project.build.directory}/classes</outputDirectory>
>> >                                </artifactItem>
>> >                            </artifactItems>
>> >                            <overWriteReleases>true</overWriteReleases>
>> >                            <overWriteSnapshots>true</overWriteSnapshots>
>> >                        </configuration>
>> >                    </execution>
>> >                </executions>
>> >            </plugin>
>> >
>> > For some reason after running the install goal the unpack seems to have
>> > taken precedence over the compile!
>>
>> "install" isn't a goal in this case, it is a phase.   When you run
>> "install", you are asking Maven to walk through the entire lifecycle
>> (except the deploy phase).   Instead of trying to test with the
>> "install" phase, run "mvn generate-sources" then run "mvn compile".
>> Also use the -X flag to get more output.
>>
>> Take a look at the list of phases here:
>>
>> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>>
>>
>> >
>> > Since the generate-sources phase is before compile shouldn't the compile
>> > have over written the unpack?  I'm confused.
>> >
>>
>> Do you have source in src/main/java?   What is your project's packaging?
>>
>> > -Dave
>> >
>> >
>> > On Tue, Aug 4, 2009 at 8:39 AM, Tim O'Brien <to...@discursive.com>
>> wrote:
>> >
>> >> On Tue, Aug 4, 2009 at 9:25 AM, David Hoffer<dh...@gmail.com>
>> wrote:
>> >> > What is the maven way of creating a patched jar?
>> >> >
>> >> > I have a case where I need to apply some overrides to a binary jar
>> which
>> >> is
>> >> > one of my dependencies.  I have the source code for the overrides.
>>  So I
>> >> > could create a child module with the source and the one dependency
>> that
>> >> > needs the overrides applied.  What maven plugin would I use to
>> extract
>> >> the
>> >> > class files from the dependency, combine with the new generated
>> classes
>> >> from
>> >> > source, and then re-jar?  The final artifact would have a new name,
>> i.e.
>> >> > _patched, so as to not get confused with the original.  How can I
>> then
>> >> stop
>> >> > the transitive dependency on the original jar?  I would want the
>> >> dependency
>> >> > to be on the new patched version only.
>> >> >
>> >>
>> >> 1. Create a project with a new groupId, artifactId, and version.
>> >>
>> >> 2.  Publish this third-party binary to a repository manager - you can
>> >> use one of the various repository managers that allow you to manually
>> >> upload an artifact.   (Me?  I'd recommend Nexus).
>> >>
>> >> 3. Use the dependency plugin to unpack the artifact to your project's
>> >> target/classes.   Bind the unpack goal to generate-sources or
>> >> generate-resources so that the download and unpack.
>> >>
>> >> Unpack Mojo:
>> >>
>> http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html
>> >> Intro to Lifecycle:
>> >>
>> >>
>> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>> >>
>> >> 4. Package, publish your new patched artifact to a repository manager
>> >> (under a new groupId, artifactId, version).
>> >>
>> >> The key here is that you create a project that patches the original
>> >> artifact and then publishes it under a different GAV coordinate.   I
>> >> would not recommend patching the JAR and then writing it back to the
>> >> repository manager under the same GAV coordinate: 1. You are going to
>> >> have a GAV collision, and 2. It makes it difficult to update to a new
>> >> version of this binary dependency.
>> >>
>> >> > What's the maven way of doing this sort of thing?
>> >> >
>> >>
>> >> Good luck.
>> >>
>> >> > -Dave
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> 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
>>
>>
>

Re: How to create patched artifact?

Posted by David Hoffer <dh...@gmail.com>.
Hum,

Adding <overWriteIfNewer>false</overWriteIfNewer> does not help either.  The
behavior I am seeing is that it always overwrites.

-Dave

On Tue, Aug 4, 2009 at 12:49 PM, David Hoffer <dh...@gmail.com> wrote:

> I think our emails collided.  Just to be clear, here is my new
> configuration.  It does not work because it overwrites what the compiler
> did.
>
> <executions>
>                     <execution>
>                         <id>unpack</id>
>                         <phase>process-classes</phase>
>                         <goals>
>                             <goal>unpack</goal>
>                         </goals>
>                         <configuration>
>                             <artifactItems>
>                                 <artifactItem>
>                                     <groupId>wt</groupId>
>                                     <artifactId>wt</artifactId>
>                                     <version>4.0-SNAPSHOT</version>
>                                     <type>jar</type>
>                                     <overWrite>false</overWrite>
>
> <outputDirectory>${project.build.directory}/classes</outputDirectory>
>                                 </artifactItem>
>                             </artifactItems>
>                             <overWriteReleases>false</overWriteReleases>
>                             <overWriteSnapshots>false</overWriteSnapshots>
>                         </configuration>
>                     </execution>
>                 </executions>
>
> -Dave
>
>
> On Tue, Aug 4, 2009 at 12:46 PM, Tim O'Brien <to...@discursive.com>wrote:
>
>> On Tue, Aug 4, 2009 at 1:25 PM, David Hoffer<dh...@gmail.com> wrote:
>> > Yeah, I meant install phase.  My pom's packaging is jar, and I have the
>> > source in src/main/java.
>> >
>> > It seems to find the source because for new files I do find the compiled
>> > classes in the right places.  However what I also find is that for
>> classes
>> > in the dependent jar they seem to have overwrote the compiled ones.
>> >
>> > I think what is happening is that during the compile phase it simply
>> skips
>> > the compile (or at least the writing of the class file to disk) if it
>> > already exists.  How can I configure the compile to always overwrite?
>>
>> Move the copy goal that you declared to happen just after compilation.
>>  Look at the lifecycle list, I think you want "process-classes"
>>
>> >
>> > -Dave
>> >
>> > On Tue, Aug 4, 2009 at 12:10 PM, Tim O'Brien <to...@discursive.com>
>> wrote:
>> >
>> >> On Tue, Aug 4, 2009 at 1:01 PM, David Hoffer<dh...@gmail.com>
>> wrote:
>> >> > Hum,
>> >> >
>> >> > I'm getting close but not quite there yet.  Here is my configuration.
>> >> >
>> >> > <plugin>
>> >> >                <groupId>org.apache.maven.plugins</groupId>
>> >> >                <artifactId>maven-dependency-plugin</artifactId>
>> >> >                <executions>
>> >> >                    <execution>
>> >> >                        <id>unpack</id>
>> >> >                        <phase>generate-sources</phase>
>> >> >                        <goals>
>> >> >                            <goal>unpack</goal>
>> >> >                        </goals>
>> >> >                        <configuration>
>> >> >                            <artifactItems>
>> >> >                                <artifactItem>
>> >> >                                    <groupId>wt</groupId>
>> >> >                                    <artifactId>wt</artifactId>
>> >> >                                    <version>4.0-SNAPSHOT</version>
>> >> >                                    <type>jar</type>
>> >> >                                    <overWrite>true</overWrite>
>> >> >
>> >> > <outputDirectory>${project.build.directory}/classes</outputDirectory>
>> >> >                                </artifactItem>
>> >> >                            </artifactItems>
>> >> >
>>  <overWriteReleases>true</overWriteReleases>
>> >> >
>>  <overWriteSnapshots>true</overWriteSnapshots>
>> >> >                        </configuration>
>> >> >                    </execution>
>> >> >                </executions>
>> >> >            </plugin>
>> >> >
>> >> > For some reason after running the install goal the unpack seems to
>> have
>> >> > taken precedence over the compile!
>> >>
>> >> "install" isn't a goal in this case, it is a phase.   When you run
>> >> "install", you are asking Maven to walk through the entire lifecycle
>> >> (except the deploy phase).   Instead of trying to test with the
>> >> "install" phase, run "mvn generate-sources" then run "mvn compile".
>> >> Also use the -X flag to get more output.
>> >>
>> >> Take a look at the list of phases here:
>> >>
>> >>
>> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>> >>
>> >>
>> >> >
>> >> > Since the generate-sources phase is before compile shouldn't the
>> compile
>> >> > have over written the unpack?  I'm confused.
>> >> >
>> >>
>> >> Do you have source in src/main/java?   What is your project's
>> packaging?
>> >>
>> >> > -Dave
>> >> >
>> >> >
>> >> > On Tue, Aug 4, 2009 at 8:39 AM, Tim O'Brien <to...@discursive.com>
>> >> wrote:
>> >> >
>> >> >> On Tue, Aug 4, 2009 at 9:25 AM, David Hoffer<dh...@gmail.com>
>> wrote:
>> >> >> > What is the maven way of creating a patched jar?
>> >> >> >
>> >> >> > I have a case where I need to apply some overrides to a binary jar
>> >> which
>> >> >> is
>> >> >> > one of my dependencies.  I have the source code for the overrides.
>>  So
>> >> I
>> >> >> > could create a child module with the source and the one dependency
>> >> that
>> >> >> > needs the overrides applied.  What maven plugin would I use to
>> extract
>> >> >> the
>> >> >> > class files from the dependency, combine with the new generated
>> >> classes
>> >> >> from
>> >> >> > source, and then re-jar?  The final artifact would have a new
>> name,
>> >> i.e.
>> >> >> > _patched, so as to not get confused with the original.  How can I
>> then
>> >> >> stop
>> >> >> > the transitive dependency on the original jar?  I would want the
>> >> >> dependency
>> >> >> > to be on the new patched version only.
>> >> >> >
>> >> >>
>> >> >> 1. Create a project with a new groupId, artifactId, and version.
>> >> >>
>> >> >> 2.  Publish this third-party binary to a repository manager - you
>> can
>> >> >> use one of the various repository managers that allow you to
>> manually
>> >> >> upload an artifact.   (Me?  I'd recommend Nexus).
>> >> >>
>> >> >> 3. Use the dependency plugin to unpack the artifact to your
>> project's
>> >> >> target/classes.   Bind the unpack goal to generate-sources or
>> >> >> generate-resources so that the download and unpack.
>> >> >>
>> >> >> Unpack Mojo:
>> >> >>
>> >>
>> http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html
>> >> >> Intro to Lifecycle:
>> >> >>
>> >> >>
>> >>
>> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>> >> >>
>> >> >> 4. Package, publish your new patched artifact to a repository
>> manager
>> >> >> (under a new groupId, artifactId, version).
>> >> >>
>> >> >> The key here is that you create a project that patches the original
>> >> >> artifact and then publishes it under a different GAV coordinate.   I
>> >> >> would not recommend patching the JAR and then writing it back to the
>> >> >> repository manager under the same GAV coordinate: 1. You are going
>> to
>> >> >> have a GAV collision, and 2. It makes it difficult to update to a
>> new
>> >> >> version of this binary dependency.
>> >> >>
>> >> >> > What's the maven way of doing this sort of thing?
>> >> >> >
>> >> >>
>> >> >> Good luck.
>> >> >>
>> >> >> > -Dave
>> >> >> >
>> >> >>
>> >> >>
>> ---------------------------------------------------------------------
>> >> >> 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
>>
>>
>

Re: How to create patched artifact?

Posted by David Hoffer <dh...@gmail.com>.
I think our emails collided.  Just to be clear, here is my new
configuration.  It does not work because it overwrites what the compiler
did.

<executions>
                    <execution>
                        <id>unpack</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>wt</groupId>
                                    <artifactId>wt</artifactId>
                                    <version>4.0-SNAPSHOT</version>
                                    <type>jar</type>
                                    <overWrite>false</overWrite>

<outputDirectory>${project.build.directory}/classes</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                        </configuration>
                    </execution>
                </executions>

-Dave

On Tue, Aug 4, 2009 at 12:46 PM, Tim O'Brien <to...@discursive.com> wrote:

> On Tue, Aug 4, 2009 at 1:25 PM, David Hoffer<dh...@gmail.com> wrote:
> > Yeah, I meant install phase.  My pom's packaging is jar, and I have the
> > source in src/main/java.
> >
> > It seems to find the source because for new files I do find the compiled
> > classes in the right places.  However what I also find is that for
> classes
> > in the dependent jar they seem to have overwrote the compiled ones.
> >
> > I think what is happening is that during the compile phase it simply
> skips
> > the compile (or at least the writing of the class file to disk) if it
> > already exists.  How can I configure the compile to always overwrite?
>
> Move the copy goal that you declared to happen just after compilation.
>  Look at the lifecycle list, I think you want "process-classes"
>
> >
> > -Dave
> >
> > On Tue, Aug 4, 2009 at 12:10 PM, Tim O'Brien <to...@discursive.com>
> wrote:
> >
> >> On Tue, Aug 4, 2009 at 1:01 PM, David Hoffer<dh...@gmail.com> wrote:
> >> > Hum,
> >> >
> >> > I'm getting close but not quite there yet.  Here is my configuration.
> >> >
> >> > <plugin>
> >> >                <groupId>org.apache.maven.plugins</groupId>
> >> >                <artifactId>maven-dependency-plugin</artifactId>
> >> >                <executions>
> >> >                    <execution>
> >> >                        <id>unpack</id>
> >> >                        <phase>generate-sources</phase>
> >> >                        <goals>
> >> >                            <goal>unpack</goal>
> >> >                        </goals>
> >> >                        <configuration>
> >> >                            <artifactItems>
> >> >                                <artifactItem>
> >> >                                    <groupId>wt</groupId>
> >> >                                    <artifactId>wt</artifactId>
> >> >                                    <version>4.0-SNAPSHOT</version>
> >> >                                    <type>jar</type>
> >> >                                    <overWrite>true</overWrite>
> >> >
> >> > <outputDirectory>${project.build.directory}/classes</outputDirectory>
> >> >                                </artifactItem>
> >> >                            </artifactItems>
> >> >                            <overWriteReleases>true</overWriteReleases>
> >> >
>  <overWriteSnapshots>true</overWriteSnapshots>
> >> >                        </configuration>
> >> >                    </execution>
> >> >                </executions>
> >> >            </plugin>
> >> >
> >> > For some reason after running the install goal the unpack seems to
> have
> >> > taken precedence over the compile!
> >>
> >> "install" isn't a goal in this case, it is a phase.   When you run
> >> "install", you are asking Maven to walk through the entire lifecycle
> >> (except the deploy phase).   Instead of trying to test with the
> >> "install" phase, run "mvn generate-sources" then run "mvn compile".
> >> Also use the -X flag to get more output.
> >>
> >> Take a look at the list of phases here:
> >>
> >>
> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
> >>
> >>
> >> >
> >> > Since the generate-sources phase is before compile shouldn't the
> compile
> >> > have over written the unpack?  I'm confused.
> >> >
> >>
> >> Do you have source in src/main/java?   What is your project's packaging?
> >>
> >> > -Dave
> >> >
> >> >
> >> > On Tue, Aug 4, 2009 at 8:39 AM, Tim O'Brien <to...@discursive.com>
> >> wrote:
> >> >
> >> >> On Tue, Aug 4, 2009 at 9:25 AM, David Hoffer<dh...@gmail.com>
> wrote:
> >> >> > What is the maven way of creating a patched jar?
> >> >> >
> >> >> > I have a case where I need to apply some overrides to a binary jar
> >> which
> >> >> is
> >> >> > one of my dependencies.  I have the source code for the overrides.
>  So
> >> I
> >> >> > could create a child module with the source and the one dependency
> >> that
> >> >> > needs the overrides applied.  What maven plugin would I use to
> extract
> >> >> the
> >> >> > class files from the dependency, combine with the new generated
> >> classes
> >> >> from
> >> >> > source, and then re-jar?  The final artifact would have a new name,
> >> i.e.
> >> >> > _patched, so as to not get confused with the original.  How can I
> then
> >> >> stop
> >> >> > the transitive dependency on the original jar?  I would want the
> >> >> dependency
> >> >> > to be on the new patched version only.
> >> >> >
> >> >>
> >> >> 1. Create a project with a new groupId, artifactId, and version.
> >> >>
> >> >> 2.  Publish this third-party binary to a repository manager - you can
> >> >> use one of the various repository managers that allow you to manually
> >> >> upload an artifact.   (Me?  I'd recommend Nexus).
> >> >>
> >> >> 3. Use the dependency plugin to unpack the artifact to your project's
> >> >> target/classes.   Bind the unpack goal to generate-sources or
> >> >> generate-resources so that the download and unpack.
> >> >>
> >> >> Unpack Mojo:
> >> >>
> >>
> http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html
> >> >> Intro to Lifecycle:
> >> >>
> >> >>
> >>
> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
> >> >>
> >> >> 4. Package, publish your new patched artifact to a repository manager
> >> >> (under a new groupId, artifactId, version).
> >> >>
> >> >> The key here is that you create a project that patches the original
> >> >> artifact and then publishes it under a different GAV coordinate.   I
> >> >> would not recommend patching the JAR and then writing it back to the
> >> >> repository manager under the same GAV coordinate: 1. You are going to
> >> >> have a GAV collision, and 2. It makes it difficult to update to a new
> >> >> version of this binary dependency.
> >> >>
> >> >> > What's the maven way of doing this sort of thing?
> >> >> >
> >> >>
> >> >> Good luck.
> >> >>
> >> >> > -Dave
> >> >> >
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> 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
>
>

Re: How to create patched artifact?

Posted by Tim O'Brien <to...@discursive.com>.
On Tue, Aug 4, 2009 at 1:25 PM, David Hoffer<dh...@gmail.com> wrote:
> Yeah, I meant install phase.  My pom's packaging is jar, and I have the
> source in src/main/java.
>
> It seems to find the source because for new files I do find the compiled
> classes in the right places.  However what I also find is that for classes
> in the dependent jar they seem to have overwrote the compiled ones.
>
> I think what is happening is that during the compile phase it simply skips
> the compile (or at least the writing of the class file to disk) if it
> already exists.  How can I configure the compile to always overwrite?

Move the copy goal that you declared to happen just after compilation.
  Look at the lifecycle list, I think you want "process-classes"

>
> -Dave
>
> On Tue, Aug 4, 2009 at 12:10 PM, Tim O'Brien <to...@discursive.com> wrote:
>
>> On Tue, Aug 4, 2009 at 1:01 PM, David Hoffer<dh...@gmail.com> wrote:
>> > Hum,
>> >
>> > I'm getting close but not quite there yet.  Here is my configuration.
>> >
>> > <plugin>
>> >                <groupId>org.apache.maven.plugins</groupId>
>> >                <artifactId>maven-dependency-plugin</artifactId>
>> >                <executions>
>> >                    <execution>
>> >                        <id>unpack</id>
>> >                        <phase>generate-sources</phase>
>> >                        <goals>
>> >                            <goal>unpack</goal>
>> >                        </goals>
>> >                        <configuration>
>> >                            <artifactItems>
>> >                                <artifactItem>
>> >                                    <groupId>wt</groupId>
>> >                                    <artifactId>wt</artifactId>
>> >                                    <version>4.0-SNAPSHOT</version>
>> >                                    <type>jar</type>
>> >                                    <overWrite>true</overWrite>
>> >
>> > <outputDirectory>${project.build.directory}/classes</outputDirectory>
>> >                                </artifactItem>
>> >                            </artifactItems>
>> >                            <overWriteReleases>true</overWriteReleases>
>> >                            <overWriteSnapshots>true</overWriteSnapshots>
>> >                        </configuration>
>> >                    </execution>
>> >                </executions>
>> >            </plugin>
>> >
>> > For some reason after running the install goal the unpack seems to have
>> > taken precedence over the compile!
>>
>> "install" isn't a goal in this case, it is a phase.   When you run
>> "install", you are asking Maven to walk through the entire lifecycle
>> (except the deploy phase).   Instead of trying to test with the
>> "install" phase, run "mvn generate-sources" then run "mvn compile".
>> Also use the -X flag to get more output.
>>
>> Take a look at the list of phases here:
>>
>> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>>
>>
>> >
>> > Since the generate-sources phase is before compile shouldn't the compile
>> > have over written the unpack?  I'm confused.
>> >
>>
>> Do you have source in src/main/java?   What is your project's packaging?
>>
>> > -Dave
>> >
>> >
>> > On Tue, Aug 4, 2009 at 8:39 AM, Tim O'Brien <to...@discursive.com>
>> wrote:
>> >
>> >> On Tue, Aug 4, 2009 at 9:25 AM, David Hoffer<dh...@gmail.com> wrote:
>> >> > What is the maven way of creating a patched jar?
>> >> >
>> >> > I have a case where I need to apply some overrides to a binary jar
>> which
>> >> is
>> >> > one of my dependencies.  I have the source code for the overrides.  So
>> I
>> >> > could create a child module with the source and the one dependency
>> that
>> >> > needs the overrides applied.  What maven plugin would I use to extract
>> >> the
>> >> > class files from the dependency, combine with the new generated
>> classes
>> >> from
>> >> > source, and then re-jar?  The final artifact would have a new name,
>> i.e.
>> >> > _patched, so as to not get confused with the original.  How can I then
>> >> stop
>> >> > the transitive dependency on the original jar?  I would want the
>> >> dependency
>> >> > to be on the new patched version only.
>> >> >
>> >>
>> >> 1. Create a project with a new groupId, artifactId, and version.
>> >>
>> >> 2.  Publish this third-party binary to a repository manager - you can
>> >> use one of the various repository managers that allow you to manually
>> >> upload an artifact.   (Me?  I'd recommend Nexus).
>> >>
>> >> 3. Use the dependency plugin to unpack the artifact to your project's
>> >> target/classes.   Bind the unpack goal to generate-sources or
>> >> generate-resources so that the download and unpack.
>> >>
>> >> Unpack Mojo:
>> >>
>> http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html
>> >> Intro to Lifecycle:
>> >>
>> >>
>> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>> >>
>> >> 4. Package, publish your new patched artifact to a repository manager
>> >> (under a new groupId, artifactId, version).
>> >>
>> >> The key here is that you create a project that patches the original
>> >> artifact and then publishes it under a different GAV coordinate.   I
>> >> would not recommend patching the JAR and then writing it back to the
>> >> repository manager under the same GAV coordinate: 1. You are going to
>> >> have a GAV collision, and 2. It makes it difficult to update to a new
>> >> version of this binary dependency.
>> >>
>> >> > What's the maven way of doing this sort of thing?
>> >> >
>> >>
>> >> Good luck.
>> >>
>> >> > -Dave
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> 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


Re: How to create patched artifact?

Posted by David Hoffer <dh...@gmail.com>.
Yeah, I meant install phase.  My pom's packaging is jar, and I have the
source in src/main/java.

It seems to find the source because for new files I do find the compiled
classes in the right places.  However what I also find is that for classes
in the dependent jar they seem to have overwrote the compiled ones.

I think what is happening is that during the compile phase it simply skips
the compile (or at least the writing of the class file to disk) if it
already exists.  How can I configure the compile to always overwrite?

-Dave

On Tue, Aug 4, 2009 at 12:10 PM, Tim O'Brien <to...@discursive.com> wrote:

> On Tue, Aug 4, 2009 at 1:01 PM, David Hoffer<dh...@gmail.com> wrote:
> > Hum,
> >
> > I'm getting close but not quite there yet.  Here is my configuration.
> >
> > <plugin>
> >                <groupId>org.apache.maven.plugins</groupId>
> >                <artifactId>maven-dependency-plugin</artifactId>
> >                <executions>
> >                    <execution>
> >                        <id>unpack</id>
> >                        <phase>generate-sources</phase>
> >                        <goals>
> >                            <goal>unpack</goal>
> >                        </goals>
> >                        <configuration>
> >                            <artifactItems>
> >                                <artifactItem>
> >                                    <groupId>wt</groupId>
> >                                    <artifactId>wt</artifactId>
> >                                    <version>4.0-SNAPSHOT</version>
> >                                    <type>jar</type>
> >                                    <overWrite>true</overWrite>
> >
> > <outputDirectory>${project.build.directory}/classes</outputDirectory>
> >                                </artifactItem>
> >                            </artifactItems>
> >                            <overWriteReleases>true</overWriteReleases>
> >                            <overWriteSnapshots>true</overWriteSnapshots>
> >                        </configuration>
> >                    </execution>
> >                </executions>
> >            </plugin>
> >
> > For some reason after running the install goal the unpack seems to have
> > taken precedence over the compile!
>
> "install" isn't a goal in this case, it is a phase.   When you run
> "install", you are asking Maven to walk through the entire lifecycle
> (except the deploy phase).   Instead of trying to test with the
> "install" phase, run "mvn generate-sources" then run "mvn compile".
> Also use the -X flag to get more output.
>
> Take a look at the list of phases here:
>
> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>
>
> >
> > Since the generate-sources phase is before compile shouldn't the compile
> > have over written the unpack?  I'm confused.
> >
>
> Do you have source in src/main/java?   What is your project's packaging?
>
> > -Dave
> >
> >
> > On Tue, Aug 4, 2009 at 8:39 AM, Tim O'Brien <to...@discursive.com>
> wrote:
> >
> >> On Tue, Aug 4, 2009 at 9:25 AM, David Hoffer<dh...@gmail.com> wrote:
> >> > What is the maven way of creating a patched jar?
> >> >
> >> > I have a case where I need to apply some overrides to a binary jar
> which
> >> is
> >> > one of my dependencies.  I have the source code for the overrides.  So
> I
> >> > could create a child module with the source and the one dependency
> that
> >> > needs the overrides applied.  What maven plugin would I use to extract
> >> the
> >> > class files from the dependency, combine with the new generated
> classes
> >> from
> >> > source, and then re-jar?  The final artifact would have a new name,
> i.e.
> >> > _patched, so as to not get confused with the original.  How can I then
> >> stop
> >> > the transitive dependency on the original jar?  I would want the
> >> dependency
> >> > to be on the new patched version only.
> >> >
> >>
> >> 1. Create a project with a new groupId, artifactId, and version.
> >>
> >> 2.  Publish this third-party binary to a repository manager - you can
> >> use one of the various repository managers that allow you to manually
> >> upload an artifact.   (Me?  I'd recommend Nexus).
> >>
> >> 3. Use the dependency plugin to unpack the artifact to your project's
> >> target/classes.   Bind the unpack goal to generate-sources or
> >> generate-resources so that the download and unpack.
> >>
> >> Unpack Mojo:
> >>
> http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html
> >> Intro to Lifecycle:
> >>
> >>
> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
> >>
> >> 4. Package, publish your new patched artifact to a repository manager
> >> (under a new groupId, artifactId, version).
> >>
> >> The key here is that you create a project that patches the original
> >> artifact and then publishes it under a different GAV coordinate.   I
> >> would not recommend patching the JAR and then writing it back to the
> >> repository manager under the same GAV coordinate: 1. You are going to
> >> have a GAV collision, and 2. It makes it difficult to update to a new
> >> version of this binary dependency.
> >>
> >> > What's the maven way of doing this sort of thing?
> >> >
> >>
> >> Good luck.
> >>
> >> > -Dave
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> 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
>
>

Re: How to create patched artifact?

Posted by Tim O'Brien <to...@discursive.com>.
On Tue, Aug 4, 2009 at 1:01 PM, David Hoffer<dh...@gmail.com> wrote:
> Hum,
>
> I'm getting close but not quite there yet.  Here is my configuration.
>
> <plugin>
>                <groupId>org.apache.maven.plugins</groupId>
>                <artifactId>maven-dependency-plugin</artifactId>
>                <executions>
>                    <execution>
>                        <id>unpack</id>
>                        <phase>generate-sources</phase>
>                        <goals>
>                            <goal>unpack</goal>
>                        </goals>
>                        <configuration>
>                            <artifactItems>
>                                <artifactItem>
>                                    <groupId>wt</groupId>
>                                    <artifactId>wt</artifactId>
>                                    <version>4.0-SNAPSHOT</version>
>                                    <type>jar</type>
>                                    <overWrite>true</overWrite>
>
> <outputDirectory>${project.build.directory}/classes</outputDirectory>
>                                </artifactItem>
>                            </artifactItems>
>                            <overWriteReleases>true</overWriteReleases>
>                            <overWriteSnapshots>true</overWriteSnapshots>
>                        </configuration>
>                    </execution>
>                </executions>
>            </plugin>
>
> For some reason after running the install goal the unpack seems to have
> taken precedence over the compile!

"install" isn't a goal in this case, it is a phase.   When you run
"install", you are asking Maven to walk through the entire lifecycle
(except the deploy phase).   Instead of trying to test with the
"install" phase, run "mvn generate-sources" then run "mvn compile".
Also use the -X flag to get more output.

Take a look at the list of phases here:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html


>
> Since the generate-sources phase is before compile shouldn't the compile
> have over written the unpack?  I'm confused.
>

Do you have source in src/main/java?   What is your project's packaging?

> -Dave
>
>
> On Tue, Aug 4, 2009 at 8:39 AM, Tim O'Brien <to...@discursive.com> wrote:
>
>> On Tue, Aug 4, 2009 at 9:25 AM, David Hoffer<dh...@gmail.com> wrote:
>> > What is the maven way of creating a patched jar?
>> >
>> > I have a case where I need to apply some overrides to a binary jar which
>> is
>> > one of my dependencies.  I have the source code for the overrides.  So I
>> > could create a child module with the source and the one dependency that
>> > needs the overrides applied.  What maven plugin would I use to extract
>> the
>> > class files from the dependency, combine with the new generated classes
>> from
>> > source, and then re-jar?  The final artifact would have a new name, i.e.
>> > _patched, so as to not get confused with the original.  How can I then
>> stop
>> > the transitive dependency on the original jar?  I would want the
>> dependency
>> > to be on the new patched version only.
>> >
>>
>> 1. Create a project with a new groupId, artifactId, and version.
>>
>> 2.  Publish this third-party binary to a repository manager - you can
>> use one of the various repository managers that allow you to manually
>> upload an artifact.   (Me?  I'd recommend Nexus).
>>
>> 3. Use the dependency plugin to unpack the artifact to your project's
>> target/classes.   Bind the unpack goal to generate-sources or
>> generate-resources so that the download and unpack.
>>
>> Unpack Mojo:
>> http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html
>> Intro to Lifecycle:
>>
>> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>>
>> 4. Package, publish your new patched artifact to a repository manager
>> (under a new groupId, artifactId, version).
>>
>> The key here is that you create a project that patches the original
>> artifact and then publishes it under a different GAV coordinate.   I
>> would not recommend patching the JAR and then writing it back to the
>> repository manager under the same GAV coordinate: 1. You are going to
>> have a GAV collision, and 2. It makes it difficult to update to a new
>> version of this binary dependency.
>>
>> > What's the maven way of doing this sort of thing?
>> >
>>
>> Good luck.
>>
>> > -Dave
>> >
>>
>> ---------------------------------------------------------------------
>> 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


Re: How to create patched artifact?

Posted by David Hoffer <dh...@gmail.com>.
Hum,

I'm getting close but not quite there yet.  Here is my configuration.

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>unpack</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>wt</groupId>
                                    <artifactId>wt</artifactId>
                                    <version>4.0-SNAPSHOT</version>
                                    <type>jar</type>
                                    <overWrite>true</overWrite>

<outputDirectory>${project.build.directory}/classes</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                            <overWriteReleases>true</overWriteReleases>
                            <overWriteSnapshots>true</overWriteSnapshots>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

For some reason after running the install goal the unpack seems to have
taken precedence over the compile!

Since the generate-sources phase is before compile shouldn't the compile
have over written the unpack?  I'm confused.

-Dave


On Tue, Aug 4, 2009 at 8:39 AM, Tim O'Brien <to...@discursive.com> wrote:

> On Tue, Aug 4, 2009 at 9:25 AM, David Hoffer<dh...@gmail.com> wrote:
> > What is the maven way of creating a patched jar?
> >
> > I have a case where I need to apply some overrides to a binary jar which
> is
> > one of my dependencies.  I have the source code for the overrides.  So I
> > could create a child module with the source and the one dependency that
> > needs the overrides applied.  What maven plugin would I use to extract
> the
> > class files from the dependency, combine with the new generated classes
> from
> > source, and then re-jar?  The final artifact would have a new name, i.e.
> > _patched, so as to not get confused with the original.  How can I then
> stop
> > the transitive dependency on the original jar?  I would want the
> dependency
> > to be on the new patched version only.
> >
>
> 1. Create a project with a new groupId, artifactId, and version.
>
> 2.  Publish this third-party binary to a repository manager - you can
> use one of the various repository managers that allow you to manually
> upload an artifact.   (Me?  I'd recommend Nexus).
>
> 3. Use the dependency plugin to unpack the artifact to your project's
> target/classes.   Bind the unpack goal to generate-sources or
> generate-resources so that the download and unpack.
>
> Unpack Mojo:
> http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html
> Intro to Lifecycle:
>
> http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>
> 4. Package, publish your new patched artifact to a repository manager
> (under a new groupId, artifactId, version).
>
> The key here is that you create a project that patches the original
> artifact and then publishes it under a different GAV coordinate.   I
> would not recommend patching the JAR and then writing it back to the
> repository manager under the same GAV coordinate: 1. You are going to
> have a GAV collision, and 2. It makes it difficult to update to a new
> version of this binary dependency.
>
> > What's the maven way of doing this sort of thing?
> >
>
> Good luck.
>
> > -Dave
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>

Re: How to create patched artifact?

Posted by Tim O'Brien <to...@discursive.com>.
On Tue, Aug 4, 2009 at 9:25 AM, David Hoffer<dh...@gmail.com> wrote:
> What is the maven way of creating a patched jar?
>
> I have a case where I need to apply some overrides to a binary jar which is
> one of my dependencies.  I have the source code for the overrides.  So I
> could create a child module with the source and the one dependency that
> needs the overrides applied.  What maven plugin would I use to extract the
> class files from the dependency, combine with the new generated classes from
> source, and then re-jar?  The final artifact would have a new name, i.e.
> _patched, so as to not get confused with the original.  How can I then stop
> the transitive dependency on the original jar?  I would want the dependency
> to be on the new patched version only.
>

1. Create a project with a new groupId, artifactId, and version.

2.  Publish this third-party binary to a repository manager - you can
use one of the various repository managers that allow you to manually
upload an artifact.   (Me?  I'd recommend Nexus).

3. Use the dependency plugin to unpack the artifact to your project's
target/classes.   Bind the unpack goal to generate-sources or
generate-resources so that the download and unpack.

Unpack Mojo: http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html
Intro to Lifecycle:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

4. Package, publish your new patched artifact to a repository manager
(under a new groupId, artifactId, version).

The key here is that you create a project that patches the original
artifact and then publishes it under a different GAV coordinate.   I
would not recommend patching the JAR and then writing it back to the
repository manager under the same GAV coordinate: 1. You are going to
have a GAV collision, and 2. It makes it difficult to update to a new
version of this binary dependency.

> What's the maven way of doing this sort of thing?
>

Good luck.

> -Dave
>

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