Piéroni Raphaël wrote:
Hello,

I have not so much time, but i am volunteering on this if some one can point
me to the 'dependency graph api'.
And i needed some idea of code to work at home. this one is especially
insterresting part (obviously the prolog one - Steve, if you can point me to
the java-prolog library you know. the only one i know (and never used) is
http://sourceforge.net/projects/amine-platform)

> I have not so much time, but i am volunteering on this if some one can point
> me to the 'dependency graph api'.
> And i needed some idea of code to work at home. this one is especially
> insterresting part (obviously the prolog one - Steve, if you can point me to
> the java-prolog library you know. the only one i know (and never used) is
> http://sourceforge.net/projects/amine-platform)

I didnt know of that one.

The one I know of is "Jlog": http://jlogic.sourceforge.net/ .

Our deployment runtime (smartfrog) can use this or other logic engines that can be dropped in to our constraint API, so that when you deploy things you can declare constraints in the logic language; let the system work out for itself what a good solution is to some of the constraints. We explicitly support other back ends so that we remain LGPL instead of GPL;

I don't know what maven has in terms of a dependency API; what I'd do is
-grab the pom files (well, be pointed at a repository and walk the tree)
-extract the XML data
-assert that all as facts in the prolog database
-add extra rules

resolve out interesting facts

e.g

m(junit,junit,3.8.1).
m(log4j,log4j,1.2.8).
depends(m(junit,junit,3.8.1),m(log4j,log4j,1.2.8)).

Otherwise It is easy to declare transitive dependencies

depends(X,Y) :- depends(X,Z),depends(Z,Y).

Then you can get all solutions to a  problem :

depends(m(me,myapp,3.4)),X).

exclusions complicate this model. Not having written proper prolog for a decade, it doesnt come to me off the top of my head. Something like X depends on m(G,A,V) if there isnt an excludes(X,m(G,A,_)), but prolog isnt great for specifying negative facts.

Version rules are the other complexity. You can declare that a module is newer than something with the same group/artefact if its version tag is newer:

newversion(m(Group,Artefact,Version),m(Group,Artifact,Version2)) :- Version > Version2.

Then add rules about only the newest version of anything being used.

If you've never done Prolog, it is a different way of thinking. It should mesh very well with XML work. I've done RDBMS stuff with it in the past, and makes some things wonderfully easy (if desperately inefficient)

-steve





Regards,

Raphaël

2006/2/7, Steve Loughran <[EMAIL PROTECTED]>:


I personally think an interesting project for someone with time on their
hands would be to write some code to walk the repository and derive
useful facts from the dependency graph. I know this is on Brett's todo
list, but it doesnt actually need repository/CVS access, and could be
written by anyone.

Things you could do with the right tool

-reverse analysis, who uses "junit", or junit-3.7

-cycle detection; who depends on a dependency

-missing artifacts: what depends on things that arent there (split into
sun, OSS, proprietary)

-scale: who depends on the most stuff

-stability: who is most bleeding edge, versus trailing

output: generate fancy SVG graphs from it, or RDF triples for the fun of
it.

Having just been doing complex graph work in Java, I'd actually consider
using Prolog for working with the dependency graph; the plugins for java
are usually LGPL or GPL based though, especially the working ones (like
JLog).

-steve

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to