ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nicolas Lalevée (JIRA) <>
Subject [jira] Issue Comment Edited: (IVYDE-43) [PATCH] New resolver allows project linking within the workspace
Date Sun, 03 Aug 2008 14:45:44 GMT


hibou edited comment on IVYDE-43 at 8/3/08 7:44 AM:

Finally the solution from IVYDE-89 has been integrated.

      was (Author: hibou):
    Finnaly the solution from IVYDE-89 has been integrated.
> [PATCH] New resolver allows project linking within the workspace
> ----------------------------------------------------------------
>                 Key: IVYDE-43
>                 URL:
>             Project: IvyDE
>          Issue Type: New Feature
>          Components: classpath container
>            Reporter: Eugene Goldfarb
>         Attachments: IVYDE-43-r641334.patch, ivyde-43.patch, ivyde-example-censored.JPG,
> I've been dreaming and tinkering with this idea for a while, and it finally evolved into
these changes.
> This introduces a new plugin - called WorkspaceResolver.
> DISCLAIMER: These changes should NOT change how IVYDE works unless the new resolver is
set up in the Ivy configuration file.  Therefore, it should be safe to use with any existing
Ivy configuration.  The only potential issue would occur if you are using artifacts of type
"project", since I'm treating those differently.
> When used with my custom IvyClasspathContainer changes, the WorkspaceResolver will link
dependent projects when they are open in the same workspace, allowing full-fledged linked
project functionality Eclipse provides, such as incremental compilation, debugging, mouseover
javadoc pop-ups, and source browsing across projects.
>  The resolver will not work until it is properly configured, see instructions below.
> I attached the patch against IvyDE 1.2 rev. 605.  It also includes the minor console
logging changes I submitted with IVYDE-39.  Please let me know what you think and if there
are any major issues or suggestions.
>  How it works:
>  During a resolve, if the WorkspaceResolver is in the resolve chain (see below how to
set it up), it looks at all open projects in the workspace that have Ivy containers.
>  The first project that publishes the module on which the project being resolved depends,
will be picked and returned as a special type of artifact called "project".
>  The IvyClasspathContainer will recognize the artifact as a project and put the eclipse
project as a dependent project within the classpath container of the parent.  I will attach
the screenshot to show this.
>  If you do not want a project to be linked as a dependency, close it or delete from the
>  As soon as you do that, any projects that were linked to it will automatically re-resolve
(using  WorkspaceResourceChangeListener) (if that preference is enabled) and use the standard
Ivy means of finding the dependency.
>  I am also planning to have the WorkspaceResourceChangeListener auto-resolve when a new
project is added or opened, so opening a project will automatically link it into the currently
open projects where necessary.  This has been problematic, since I cannot seem to catch the
right event when a project is open.
> Some limitations and potential issues:
> 1)  Since the resolver is not aware which module revision an eclipse project is publishing
(we never put the version inside the info tag of a project's ivy.xml), it optimistically matches
any revision of the module.
> 2) Since the resolver stops after finding the first open project which matches the module,
having multiple open versions of the same project in the workspace (for example, different
branches) may set the wrong version as a dependency.
>  You are advised to only open the version of the project which you want other projects
in the workspace to depend on.
> 3)  NOTE: Transitive dependencies are not passed from the dependent project to the parent
when projects are linked.  If you find you are missing some transitive dependencies, just
set your dependent eclipse project to export its ivy dependencies.
>    (Project->Properties->Java Build Path->Order and Export-> check the ivy
>    This will only export the configuration(s) that project is using and not what a dependent
project may ask for when it's being resolved.  To do that, this resolver will need to be modified
to pass transitive dependencies along.
>  How to set it up
>  Set up a custom resolver in the resolve chain (see example below),
>    Usage Example:
>    Suppose you have a main ivyconf.xml which sets up all your resolvers to be
>    executed at command-line.
>   1) Create a new file which includes your main ivyconf.xml file
>   2) Define the custom eclipse resolver type.
>   3) Create a simple chain which uses the eclipse resolver first and then
>       the resolver which would normally be used in your config file.
>       It could be the default resolver or any other, depending on your situation.
>   4) (Optional) To optimize, if you know you will only be developing modules
>       in your organization, you may limit the calls to the eclipse resolver
>       to only modules in your organization, by using the module directives.
>       IMPORTANT NOTE: If the main config file already restricts modules in your organization
>       to a specific resolver, you will not be able to override it in your own file.
>      Either completely duplicate the main file and add eclipse resolver there,
>       or have a base file without any org-specific restrictions and then two
>       files which include it: the eclipse config and the main config.
>       (See Ivy manual for your reference).
>    5) In Eclipse preferences, navigate to Ivy preferences and select the
>       new config file just created as your default configuration file.
>    Sample ivyconf-eclipse.xml:
>  <ivyconf>
>  <include file="/path/to/ivyconf.xml"/>
>  <typedef name="eclipse" classname="org.jayasoft.ivyde.eclipse.resolver.WorkspaceResolver"/>
>  <resolvers>
>    <eclipse name="eclipse"/>
>        <chain name="eclipse-chain" returnFirst="true">
>            <resolver ref="eclipse"/>
>            <resolver ref="originalResolver"/>
>        </chain>
>  </resolvers>
>    <modules>
>        <module organisation="myOrg" name="." resolver="eclipse-chain"/>
>    </modules>
>  </ivyconf>

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message