[ https://issues.apache.org/jira/browse/IVYDE-43?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Nicolas Lalevée updated IVYDE-43: --------------------------------- Attachment: IVYDE-43-r641334.patch In order to not loose Eugene code, here is an updated version of the patch. I didn't tested thought. But I fear some classpath issues in the suggested solution since Ivy and IvyDE are two seperated bundles. Ivy would instanciate the WorkspaceResolver whereas it actually is in IvyDE. > [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.