[
https://issues.apache.org/jira/browse/IVYDE-43?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12600226#action_12600226
]
Nicolas Lalevée commented on IVYDE-43:
--------------------------------------
To properly fix the classpath issues, a simple fix will be needed in Ivy: allow
to set the classloader used by Ivy to instanciate the class specified in the
ivysettings.xml.
But even if we impelemnt that fix, we are not sure to include the
WorkspaceResolver in IvyDE as it force you to modify your settings. See
previous comments.
But you might be interested in IVYDE-89, which suggest a simpler solution.
I did not tested it thought.
> [PATCH] New resolver allows project linking within the workspace
> ----------------------------------------------------------------
>
> Key: IVYDE-43
> URL: https://issues.apache.org/jira/browse/IVYDE-43
> Project: IvyDE
> Issue Type: New Feature
> Components: classpath container
> Reporter: Eugene Goldfarb
> Assignee: Xavier Hanin
> Attachments: IVYDE-43-r641334.patch, ivyde-43.patch,
> ivyde-example-censored.JPG, 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 workspace.
> 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
> container)
> 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.