On Fri, Aug 24, 2012 at 4:44 PM, Reinhold Rumberger
<
rumbe...@googlemail.com> wrote:
> [...]
> The first is that I would like to set up my own private repository using
> Apache as server. I'd like to be able to both publish to this repository via
> HTTP and use that repository for dependency resolution.
> So far my workaround is to publish to a local directory and mirror that to the
> server, having Apache handle the serving. This is not an acceptable solution,
> though, since publishing and retrieval is done via two different remotes.
> Also, it doesn't work once more people need to push to the HTTP repository.
Hi, just telling you my own experience...
We currently use a webdav server and we mount the repository as a
local drive (in Windows: net use x:
https://domain/folder). We've been
using OpenWrap that way for several months, and it's working fine.
Since it is based on webdav, it is also easy to give specific
developers specific permissions.
> My second problem is that my solution is split into several interdependent
> projects. Since other (external) projects want to use as few assemblies as
> possible, they should be able to depend on individual projects, not just the
> entire solution.
> How would I best go about implementing this? My attempt to create several
> .wrapdescs for each of the projects in the main solution directory doesn't
> work, and if I understand the code correctly, placing them in individual
> sub-directories with the solution .wrapdesc still in the main directory won't
> work, either. Also, that workaround would mean several "wraps/" directories,
> which I would like to avoid.
I've stumbled on that too. In the end, we chose to have a 1-on-1
mapping between packages and solutions. That means that we end up with
a lot of small solutions. The advantage of this approach is that
everything is cleanly separated. The granularity of the packages also
depends on which parts of a solution you want to be able to use
independently.
An example of this is a service that consists of the implementation of
that service, and the api that is offered to other systems. The other
systems only need a dependency on that api, but not on the service
itself.
By splitting up into different solutions, you are forced to use
package dependencies instead of project dependencies.
Back to the example: you would have one solution with a project
dependency of the implementation service on the api project. If you
split it up in separate solutions, you will have a package dependency
from the service solution on the api pacakge.
I think this is good in a way because it enforces clean separation. On
the other hand, this approach definitely has drawbacks. A big drawback
is that you can no longer do refactorings over multiple
projects/packages, since they are no longer part of the same solution.
Back to the example: you want to rename a method in the api. In one
solution this is very easy with a good refactor tool. With separate
solutions, you will first rename the method in the api, create a
package from that, and use that package in the service solution, and
then refactor the service. So it is more work. On the other hand, it
might make you think twice about changing the api... this might not be
a bad thing, since one has to realise that every existing system that
uses that api will also need to be modified.
I also develop in Java, and I've used Maven as a dependency manager in
Java. A big difference bewteen java IDEs and Visual Studio, is that
you don't really have the concept of a "solution" in a java ide. You
just open projects in the ide. You can open as many projects as you
want, whether they are related or not. In combination with maven, it
also allows you to override a "package dependency" with a "project
dependency". With that kind of setup you don't have the problems as I
mentioned before, but I'm afraid that this is not possible in .NET
with Visual Studio.
Either way... like I said, we have a solution per package and it works for us.
Ruben