amit170394 / sardine

Automatically exported from code.google.com/p/sardine
0 stars 0 forks source link

Mavenize #1

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Currently, the project is built using ANT.

Switching to a maven2 project would have the following advantages:

 * The dependency management would be done in a pom.xml file rather than
commited on SVN
 * JAR files would not need to be commited into SVN
 * Maven2 automates the compiling, unit testing and packaging steps
 * Maven2 artifacts (i.e., the JAR file corresponding to sardine) can be
made available to others as a Maven2 dependency, downloadable by everyone

Original issue reported on code.google.com by goo...@alishomepage.com on 5 Jan 2010 at 8:30

GoogleCodeExporter commented 9 years ago
I see your advantages as disadvantages:

#1. Putting everything in a pom.xml file is pointless. I don't need dependency 
management.

#2. jar files in svn is absolutely the right thing to do. I want to know that 
10 years 
from now, I can check out this project, at any point, and build it cleanly. 
Maven 
repositories do not guarantee that.

#3. Ant automated the compiling, unit testing and packaging steps just fine. It 
is 
clearly defined and easy to read. It takes someone 30 seconds to come up to 
speed 
with ant. If I want the build to do something special (like define the manifest 
in the 
jar file), I don't have to dig around for some un/poorly documented attributes 
to put 
into the pom.xml file. Ant also executes quickly, doesn't require me to have a 
network connection, store a massive amount of jar files that I don't need, etc.

#4. Anyone can download the files from this website. Forcing any project to add 
a 
pom.xml file just so that it will work with Maven is a stupid broken model for 
development.

Sorry, but it isn't going to happen in my lifetime.

Original comment by latch...@gmail.com on 5 Jan 2010 at 6:11

GoogleCodeExporter commented 9 years ago
Hello

Could I propose an intermediate solution, where we would put a pom.xml for 
deploying
the generated JAR file into a repository? The main build would still be done by 
ANT,
Maven would only deploy the file in a repository.

This is required for integrating with other projects that use Maven for 
development,
the first example I think of being Apache Camel.

Thank you

Original comment by goo...@alishomepage.com on 5 Jan 2010 at 6:32

GoogleCodeExporter commented 9 years ago
Sorry, file a bug with Maven saying that they can't work with projects that 
don't have a 
pom.xml file. =)

Original comment by latch...@gmail.com on 5 Jan 2010 at 7:15

GoogleCodeExporter commented 9 years ago

Original comment by latch...@gmail.com on 6 Jan 2010 at 12:15

GoogleCodeExporter commented 9 years ago
You can keep building with ANT, and yes Maven is far form perfect. However, in 
Maven
by linking to an existing pom at least my dependency management gets easier, 
that it
is really a pain in the ass in Java. For sardine, these dependencies are 
required:

        <dependency>
            <groupId>com.googlecode</groupId>
            <artifactId>sardine</artifactId>
            <version>73</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.1.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.0.1</version>
        </dependency>

And it would be just a little bit nicer if there would be some Maven repository
somewhere where sardine has a pom.xml with the last three dependencies listed.
Btw, sardine looks very clean and nice. Thanks!

Original comment by max.at.x...@gmail.com on 16 Feb 2010 at 4:00

GoogleCodeExporter commented 9 years ago
jaxb is not required if you have java6. too bad maven can't model that.

Original comment by latch...@gmail.com on 16 Feb 2010 at 4:45

GoogleCodeExporter commented 9 years ago
:-) I agree on both. I am using Java 5. 

There are sooo many things maven cannot model, but even modelling a few helps 
me to
manage my projects. I helps especially to get used to new open-source projects
created by other people. 

Original comment by max.at.x...@gmail.com on 16 Feb 2010 at 5:24

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Just to be clear, my requirements for Maven artifact generation are:

 * This project will continue to build and run tests with ant.  It should not be a 
requirement to have maven installed.

 * The standard distribution will be built with ant.

 * You can modify the ant buildfile, but don't make structural changes to the project 
(ie move code around in directories). If 
it requires any changes to the project at all, we need to talk about it.

 * You will take "ownership" of the maven releases.  I do not want to maintain this 
stuff.

 * I do not want the artifacts distributed to the central maven repositories. I will only 
accept duplicating the Maven repo 
structure in svn here on google code. 
http://www.thewebsemantic.com/2009/04/11/your-very-own-google-code-
maven-repo/

If this sounds reasonable to you, I'll make you a committer.

Original comment by latch...@gmail.com on 18 Feb 2010 at 10:52

GoogleCodeExporter commented 9 years ago

Original comment by latch...@gmail.com on 24 Feb 2010 at 6:22

GoogleCodeExporter commented 9 years ago
Issue 22 has been merged into this issue.

Original comment by latch...@gmail.com on 24 Feb 2010 at 6:23

GoogleCodeExporter commented 9 years ago
Do I understand it well that ant-googlecode, svnkit and svntask are needed 
solely for
build process?

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 2:29

GoogleCodeExporter commented 9 years ago
Could you please give me a commiter? I could create the maven repo right here on
google code, as I do it in JTexy project.

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 2:31

GoogleCodeExporter commented 9 years ago
Correct, they are only needed for build. I just made you a committer. =)

Original comment by latch...@gmail.com on 25 Feb 2010 at 4:29

GoogleCodeExporter commented 9 years ago
I am going to create a `maven` dir in SVN root, and put the artifacts there.

One question: What would you like the groupId to be?
1) com.googlecode.sardine
2) your.domain.sardine (eg. com.latchkey.sardine if you have some such domain)
3) don't care

I usually prefer 2), because it's more unique, and project hosting can change :)

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 8:19

GoogleCodeExporter commented 9 years ago
Done: http://sardine.googlecode.com/svn/maven/
Hopefully I've done it properly. Not tested yet, have to go to work :)

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 9:00

GoogleCodeExporter commented 9 years ago
Someone mark it as Status: Done when verified it works.

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 9:03

GoogleCodeExporter commented 9 years ago
Pls put this to the wiki or home page:

== Sardine Maven repository ==

To add Sardine as a maven dependency, add the repo to your pom.

{{{
<project>
  ...
  <repositories>
     <repository>
        <id>sardine-google-svn-repo</id>
        <snapshots> <enabled>true</enabled> </snapshots>
        <name>Sardine maven repo at Google Code</name>
        <url>http://sardine.googlecode.com/svn/maven/</url>
     </repository>
  </repositories>
  ...
  <dependencies>
    <dependency>
      <groupId>com.googlecode.sardine</groupId>
      <artifactId>sardine</artifactId>
      <version>80</version>
    </dependency>
  </dependencies>
</project>
}}}

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 10:02

GoogleCodeExporter commented 9 years ago
By the way, I understand your attitude regarding Maven. But it makes a lot of 
things
easier. Not for the developer, but for the users. And, from my experience, once 
you
get used to it, you'll see that in many aspects it's actually easier to use 
than Ant.

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 10:52

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Can you please move it up one directory? There are two sardine's...

http://sardine.googlecode.com/svn/maven/com/googlecode/sardine/sardine/

You can edit the wiki pages and set that stuff up nicely... you should have 
access to 
that.

I have a TON of experience with maven. That is why I refuse to use it. =)

Thanks for doing the work.

Original comment by latch...@gmail.com on 25 Feb 2010 at 4:15

GoogleCodeExporter commented 9 years ago
The two sardines are intentional - the path consists of 
groupId.replaceChar(".","/")
+ artifactId, which gives this path. See e.g. Dom4j:
http://repository.jboss.org/maven2/dom4j/dom4j/

This will come handy when Sardine will be split to modules, then it will be
`sardine/sardine-core` etc.

Ok then, Ant is good as well. I will check the project ocassionally and create 
the
artifact; only, please, let me know (comment this issue) when the deps change 
(incl.
versions), thanks. And thanks for the library, too, I like the simplicity it 
gives to
WebDAV :)

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 4:37

GoogleCodeExporter commented 9 years ago
Sardine will never be split into modules. In fact, that is one of the annoying 
things 
about maven that I don't like.

Original comment by latch...@gmail.com on 25 Feb 2010 at 4:47

GoogleCodeExporter commented 9 years ago
Added `Maven` wiki page & marked as Featured to let people see it on the home 
page.

By modules, I mean .jar's. What if Sardine gains a big momentum and plug-ins 
will
begin to pop up ;-) But let's solve it when it comes. Currently this perfectly 
fits.

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 4:53

GoogleCodeExporter commented 9 years ago
If you can fix the directory structure, I'd like that. If Sardine ever has 
plugin's we can 
change it at that point.

Original comment by latch...@gmail.com on 25 Feb 2010 at 4:56

GoogleCodeExporter commented 9 years ago
Sardine has a dependency on HttpClient 4.0.1 and JAXB (for JDK 5). Why is this 
not 
reflected in the Maven dependencies in the wiki page?

Original comment by latch...@gmail.com on 25 Feb 2010 at 4:59

GoogleCodeExporter commented 9 years ago
Ad 25) - modularity is not the reason. The only way to have it with single 
/sardine/
is to use the group `com.googlecode`, which is likely to collide with other 
projects,
and possibly would be disregarded by their autors. It's similar like if you 
wanted to
use `com.googlecode` as a package for your classes.

Ad 26)  HttpClient dep is described in the `sardine` artifact's pom - see
http://sardine.googlecode.com/svn/maven/com/googlecode/sardine/sardine/80/sardin
e-80.pom
.

I have created kind of "default" artifact for JDK 6, which is what I use; thus, 
no
JAXB deps. I will create a JDK 5 version in few days (using Maven classifiers), 
which
will include JAXB deps; but first I have to think up the efficient way - it 
should be
possible to have only one `.jar` but more `pom.xml` to describe this 
difference, but
I haven't done this yet so I have to look around how to :)

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 5:39

GoogleCodeExporter commented 9 years ago
And, BTW, that immediately gives the reason to have sardine/sardine - because, 
it
will most probably become sardine/sardine-jar, sardine/sardine-jdk5, and
sardine/sardine-jdk6.

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 5:53

GoogleCodeExporter commented 9 years ago
No it won't. Sardine itself doesn't have JDK6/JDK5 dependencies. It only has a 
dependency on JAXB which is missing from JDK5, but included in JDK6.

Original comment by latch...@gmail.com on 25 Feb 2010 at 5:56

GoogleCodeExporter commented 9 years ago
It's possible to do it the same way in Maven by declaring JAXB as `provided`, 
but
then user on JDK 5 must add the JAXB deps in his project. With those 
classifiers, one
would only need to choose the  right name. One-byte difference.

But anyway, I think I found a better way, with just one artifact.

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 6:48

GoogleCodeExporter commented 9 years ago
There is a better way, it is called Maven profiles. See the documentation
http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Example:

<profiles>
  <profile>
    <activation>
      <jdk>[1.3,1.6)</jdk>
    </activation>
    ...
  </profile>
</profiles>

and replace the ... with your dependencies

Original comment by goo...@alishomepage.com on 25 Feb 2010 at 6:54

GoogleCodeExporter commented 9 years ago
Another one of my complaints. The documentation for Maven sucks. [1.3,1.6) ??? 
These guys don't even look at 
their own docs.

Original comment by latch...@gmail.com on 25 Feb 2010 at 6:58

GoogleCodeExporter commented 9 years ago
Oh nevermind, I see that someone came up with some retarded version range 
specification syntax.

Original comment by latch...@gmail.com on 25 Feb 2010 at 6:59

GoogleCodeExporter commented 9 years ago
#31 Aah, profiles. Why didn't that cross my mind? Thanks :)

#32 Yeah, the doc sucks. The more it sucks when you start to cope with non-core
plugins. Whole Maven sucks :) I think I have as much complaints about Maven as 
you have.

But still I can hardly imagine managing my projects without it. You see, I have 
like
100+ deps, changing every day. Then I need to put their javadocs and sources to 
the
IDE... Maven (or, better said, it's conventions) does it for me. Most of libs 
are in
Maven repo now. Ivy didn't catch the train.

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 7:13

GoogleCodeExporter commented 9 years ago
100+ deps changing every day? It sounds like something is wrong with the design 
of your system. I can't imagine 
how QA would deal with that many changes.

Original comment by latch...@gmail.com on 25 Feb 2010 at 7:24

GoogleCodeExporter commented 9 years ago
And that's not all - some of them are snapshots, which adds some salt in the 
wound.

BTW. Why do you stick with JDK 1.5? It's EOLed already... 1.7 on the way.

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 7:48

GoogleCodeExporter commented 9 years ago
Oh, I'm not on 1.5, but others are. I even said this in the UsageGuide : Java 5 
does not include JAXB, but you are 
using Java 6 now, right? =)

1.7... yea, we'll see about that one... i'm not sure how it will ever get 
released.

Original comment by latch...@gmail.com on 25 Feb 2010 at 7:53

GoogleCodeExporter commented 9 years ago
The solution with <profile> seems not to work for poms in repository - profiles 
are
probably only considered for the artifacts being built.

Original comment by dynaw...@gmail.com on 25 Feb 2010 at 8:30

GoogleCodeExporter commented 9 years ago
Ah maven, you pile of shit.

Original comment by latch...@gmail.com on 25 Feb 2010 at 8:43

GoogleCodeExporter commented 9 years ago
I'm going to consider this resolved.

Original comment by latch...@gmail.com on 26 Feb 2010 at 5:21

GoogleCodeExporter commented 9 years ago
I'm using Java 5, for me the pom at
http://sardine.googlecode.com/svn/maven/com/googlecode/sardine/sardine/80/sardin
e-80.pom
does not work because the dependency 

\com\sun\xml\bind\jaxb-impl\2.1.12\jaxb-impl-2.1.12-jdk5.jar cannot be found in 
any
of the standard repos. Without the classifier everything should work. Even if 
you
just leave out the two JDK5-only dependencies completely, I'd be happy. I can 
simply
add them myself to my local pom.

Original comment by max.at.x...@gmail.com on 9 Mar 2010 at 2:53