Entia non sunt multiplicanda praeter necessitatem.
Don't make life difficult for yourself.
Me (paraphrasing badly)
All I wanted to do was check out some Java!
Some backstory - we have a subversion repository holding our source code, which we connect to over ssh for security.
My first problem was that I couldn't run ant scripts that checked out code from subversion. I use cygwin and openssh for scp and ssh normally. The ant task for subversion uses the JavaHL library if it can find it. It can on my machine, because one of the many subversion client installations has installed it.
The build would hang at the svn task. This was happening because my ssh keys were locked with a passphrase. The svn task can't handle this, and I didn't have time to hack in support. So I removed the passphrase. This isn't good, but practically I don't need the protection as much as I need to be able to run the script.
So now the ant script could check out components and build a deployable server. But the next problem was that it couldn't copy it over to the target host. The task didn't have access to a list of known host signatures. There are two options here - trust any host that sits at the correct IP address, or provide a list of known hosts. I had such a list - openssh builds one up for me. But I couldn't hardcode my own list into the build script - it wouldn't work for the other users. I put a copy of the list into the project instead.
This worked, but my next problem was using Eclipse as well. I like to run ant scripts from the command line, but check out modules and do development using Eclipse.
I installed the subversive plugin for Ganymede because it is meant to be nicer to use than the subclipse plugin that comes pre-installed. I installed the SVNKit and JavaHL connectors from the installation site, but only the SVNKit connector would work.
The weird problem with all of this is that although I could check out the release module in Eclipse, it would come out in SVNKit format. When I ran the script from the command line it would check out components into subdirectories using JavaHL. JavaHL uses a format SVNKit cannot read. If I refreshed the project in Eclipse, it detected this and forced me to switch to using the JavaHL connector - which won't work. So I had to hide my command line activities from Eclipse, which was going to drive me mad.
It turns out that subversive uses JavaHL provided by subclipse - so you configure it the same way for everything. What was causing the trouble for me is that under cygwin this is a directory in /home/adrian/.subversion but under ant and any windows applications this is in my application data directory in a subversion directory. The command line worked because the default tunneling app for ssh was available under cygwin - but there wasn't an ssh available on the path for windows. Once I fixed the config in the application data folder everything was working.
Except for a small problem. My openssh executable popped up a dos window for every call. There are quite a few calls happening in Eclipse. I had to switch to the TortoisePlink.exe in the TortoiseSvn installation instead. This doesn't pop up a dos window - it just pops up a window asking you to log in. To stop this you have to give it the location of a private key file. You can't use your openssh key file, though - that would be too easy. Private key files don't have a standard format, so you have to convert the openssh keys into Putty format first. This involves installing the Putty key generator. Then you supply the location of the Putty keyfile as a -i option to the plink command.
Finally, this fixed Eclipse so that I could use the JavaHL connector everywhere and everyone was happy.
Easy.
