Oops! I just noticed that the ivy container path already contains the project name, via the first argument, ?project="" so I guess I encode the project name in my own variable it isn't going to be making the situation worse.
On Wed, Jul 3, 2013 at 5:43 PM, Greg Amerson <gregory.amer...@liferay.com>wrote: > Hey Nicolas, > > I noticed that, unfortunately all liferay plugin projects are not > physically nested under the workspace location but rather they have custom > locations. So even though they are IProjects their locations are never > children of workspace root. So unfortunately doesn't work. However, if > there was another hack in there, one for the current IProject name, that > would be nice :) > > ${sdk_dir:${ivyproject_name}} > > even though that isn't a valid use of eclipse dynamic variables, if the > ResolvedPath would do another search and replace using the > IProject.getName(), that would work for me. Then I can use the current > project name as an argument into my own "sdk_dir" variable that I can > contribute via my own Eclipse plugin. > > What do you think? Can you add one more hacky variable to ResolvedPath? > > > On Wed, Jul 3, 2013 at 5:31 PM, Nicolas Lalevée < > nicolas.lale...@hibnet.org> wrote: > >> >> Le 3 juil. 2013 à 11:21, Greg Amerson <gregory.amer...@liferay.com> a >> écrit : >> >> > Hey Nicolas, >> > >> > Thanks for the update regarding containers. Regarding the ResolvedPath, >> > for me to get my relative paths to work I guess I have two options: >> > >> > 1 - You would accept a patch from me to ResolvedPath to get "../../" >> style >> > URI's to work >> > 2 - I can implement a new dynamic variable something like >> > "${liferay_sdk_dir:ivy-project-name}/ivy-settings.xml" The only bad >> thing >> > about this is that I have to encode the project name into the classpath >> > container, so if the user changes the project name, the container will >> fail >> > to load. Of course I could add a rename refactoring participant, but I >> > guess it would still be broken if user manually changes the project >> name ( >> > editing .project file ). >> > >> > Personally I would prefer option #1 :) but if that isn't doable, I can >> go >> > with #2. >> >> Have you tried ${ivyproject_loc} ? It is a kind of variable (quite hacky >> since it is not a real Eclipse variable) which got replaced by >> ${workspace_loc:projectName}. See the first lines of >> org.apache.ivyde.eclipse.ResolvedPath#resolvePath() >> >> Nicolas >> >> >> > >> > Greg >> > >> > >> > On Wed, Jul 3, 2013 at 5:07 PM, Nicolas Lalevée >> > <nicolas.lale...@hibnet.org>wrote: >> > >> >> >> >> Le 3 juil. 2013 à 10:42, carsten.pfeif...@gebit.de a écrit : >> >> >> >>> Hi Greg, >> >>> >> >>> the configuration of the Ivy classpath container is indeed the only >> >>> problematic thing here. >> >>> You would have to ask the Ivy developers (I'm just a mere user) >> whether >> >>> these options >> >>> are considered stable. It's also a bit ugly to handcraft the string >> with >> >>> these options. >> >> >> >> They definitevly can be considered stable API. And they are already >> been >> >> kept backward compatible. Because these IDs are serialized in the >> >> .classpath, so they are spread all over in the IvyDE user's >> environments. >> >> If we break anything there, we would break user's existing classpaths. >> >> >> >> >> >>> Also maintenance of the ivy classpath container settings is a little >> >>> uncomfortable. Adjusting >> >>> the container settings for a few projects is not a problem, but if you >> >>> have hundreds of them, >> >>> you have to search&replace the query-style options with regular >> >>> expressions in all .classpath files >> >>> and then hope that all the resulting options are still valid. >> >> >> >> I think it won't hurt if we expose IvyClasspathContainerConfiguration >> >> >> >> >> >>> Maybe it would be easier to have some kind of ivy.xml.properties file >> or >> >>> something similar that can be >> >>> specified as the only option for an ivy classpath container. The >> >>> properties file would contain the options >> >>> that are currently specified in the .classpath file itself. This would >> >>> even allow sharing of the properties >> >>> among multiple projects. >> >> >> >> Indeed, if you look in your .classpath, you'll see an xml encoded >> >> query-string encoded path. I have tried several time to make the >> classpath >> >> entry path more human friendly, but each time things got unstable. >> >> The JDT is building the classpath independently of the "building" of >> the >> >> workspace files. So when Eclipse is starting up, the IvyDE classpath >> >> container is asked to be configured, whereas the files may not be yet >> >> accessible. >> >> Here is an exemple of related issue: >> >> https://issues.apache.org/jira/browse/IVYDE-302 >> >> For this issue this is not dramatic, because it is about the resolve >> which >> >> is asynchronous and can be relaunch later. But configuring the >> classpath >> >> container need to be done as required by the JDT, otherwise it won't >> show >> >> properly. >> >> >> >> >> >> Nicolas >> >> >> >>> >> >>> Cheers >> >>> Carsten >> >>> >> >>> >> >>> >> >>> Von: Greg Amerson <gregory.amer...@liferay.com> >> >>> An: Ant Developers List <dev@ant.apache.org> >> >>> Datum: 03.07.2013 10:20 >> >>> Betreff: Re: Re: Re: IvyDE adopter use-cases >> >>> >> >>> >> >>> >> >>> Hey Carsten, >> >>> >> >>> On Wed, Jul 3, 2013 at 3:53 PM, <carsten.pfeif...@gebit.de> wrote: >> >>> >> >>>> Hi Greg, >> >>>> >> >>>> nature and container IDs should be as stable as an API, so it should >> not >> >>>> be a problem to rely on them. >> >>>> >> >>> >> >>> >> >>> Sure I can use them just as IDs. If they changed it would be hard to >> use >> >>> them for existing projects :). >> >>> >> >>> What about the variables query-style options that are used in the >> >>> container >> >>> path ? Can those be considered API as well? So I could avoid using >> the >> >>> Configuration object as API? >> >>> >> >>> >> >>> >> >>>> >> >>>> There's also a command org.apache.ivyde.commands.resolve, which can >> be >> >>>> parameterized with the >> >>>> project you to be resolved. Not sure if you can resolve a single >> ivy.xml >> >>>> (in case a project has multiple). >> >>>> >> >>> >> >>> >> >>> Resolving a single project is just fine, that is exactly the use-case >> I'm >> >>> using, when creating a new project. >> >>> >> >>> >> >>> >> >>> >> >>>> >> >>>> I don't know your exact problem with ResolvedPath, but you can also >> >>>> specify your ivysettings.xml >> >>>> relative to a system property, environment variable, a project >> location, >> >>>> workspace, ... >> >>>> >> >>> >> >>> >> >>> So in my case I need to use a path that is relative to the project >> >>> location, but its relative as in two parent directories higher. So I >> >> need >> >>> something like this ${project_loc}/../../ivy-settings.xml But this >> >>> doesn't >> >>> seem to work right now. I'm looking into implementing my own >> ${sdk_dir} >> >>> that would map to the correct parent directory and maybe the relative >> >> path >> >>> support wouldn't be required in ResolvedPath. I'll let you know. >> >>> >> >>> >> >>> >> >>>> >> >>>> Cheers >> >>>> Carsten >> >>>> >> >>>> >> >>>> >> >>>> Von: Greg Amerson <gregory.amer...@liferay.com> >> >>>> An: Ant Developers List <dev@ant.apache.org> >> >>>> Datum: 03.07.2013 05:04 >> >>>> Betreff: Re: Re: IvyDE adopter use-cases >> >>>> >> >>>> >> >>>> >> >>>> Hey Carsten, >> >>>> >> >>>> Thanks for those pointers, that is good to consider, especially for >> the >> >>>> nature and the container. The resolveall is a bit much but would >> rather >> >>>> just resolve that single ivy.xml file. I'm sure there is a way to >> pass >> >>>> that to an existing handler so it only resolves one. >> >>>> >> >>>> But in general, me hard coding natureIds and container IDs is as >> brittle >> >>>> as >> >>>> calling an API, so I would prefer a real API that I could call. But >> >>> until >> >>>> that is settled what the API should look like, this method would >> work. >> >>>> >> >>>> That only leaves the ResolvedPath changes. I can try to submit a >> patch >> >>>> and >> >>>> test project to import ResolvedPath support for parent directory >> >>> relative >> >>>> paths. >> >>>> >> >>>> >> >>>> On Tue, Jul 2, 2013 at 11:09 PM, <carsten.pfeif...@gebit.de> wrote: >> >>>> >> >>>>> Hi Greg, >> >>>>> >> >>>>> most of what you do with the IvyDE API can be done without the IvyDE >> >>>> API. >> >>>>> >> >>>>> 1. You can easily add the nature by using IProject.setDescription() >> >>> and >> >>>>> providing the Ivy nature ID as a string. >> >>>>> 2. You can add the Ivy classpath container to a project's classpath >> >>> with >> >>>>> JavaCore.newContainerEntry( >> >>>>> "org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER") >> >>>>> and adding that via IProject.setRawClasspath(). Adding your >> >>> specific >> >>>>> options of the container is a little >> >>>>> problematic though, I agree. You would have to add all those in >> >>> the >> >>>>> right syntax to the container string. >> >>>>> 3. You can invoke the resolving e.g. by calling ICommandService. >> >>>>> getCommand("org.apache.ivyde.commands.resolveall") >> >>>>> and invoking the execute() method on the command's handler. >> >>>>> >> >>>>> Cheers >> >>>>> Carsten >> >>>>> >> >>>>> >> >>>>> Von: Greg Amerson <gregory.amer...@liferay.com> >> >>>>> An: Ant Developers List <dev@ant.apache.org> >> >>>>> Datum: 02.07.2013 16:24 >> >>>>> Betreff: Re: IvyDE adopter use-cases >> >>>>> >> >>>>> >> >>>>> >> >>>>> Hey Nicolas, >> >>>>> >> >>>>> Answers inline: >> >>>>> >> >>>>> >> >>>>> On Tue, Jul 2, 2013 at 8:34 PM, Nicolas Lalevée >> >>>>> <nicolas.lale...@hibnet.org>wrote: >> >>>>> >> >>>>>> Hi Greg, >> >>>>>> >> >>>>>> Le 2 juil. 2013 à 12:16, Greg Amerson <gregory.amer...@liferay.com >> > >> >>> a >> >>>>>> écrit : >> >>>>>> >> >>>>>>> Hello IvyDE developers, >> >>>>>>> >> >>>>>>> My name is Greg Amerson and I am the project lead for Liferay IDE, >> >>>>> which >> >>>>>> is >> >>>>>>> a set of Eclipse plugins for Liferay development. In an upcoming >> >>>>> version >> >>>>>>> of Liferay Portal, we have integrated the use of Ivy dependency >> >>>>>> management >> >>>>>>> for plugin projects, e.g. liferay plugins (fancy j2ee web >> >>> projects) >> >>>>> that >> >>>>>>> are built using JSF portlets now use Ivy to manage jsf >> >>> dependencies. >> >>>>>>> >> >>>>>>> Therefore in Liferay IDE when our users create Liferay plugin >> >>>>> projects, >> >>>>>> we >> >>>>>>> want users to be able to take advantage of the good support in >> >>> IvyDE >> >>>>> for >> >>>>>>> dependency management, namely the Ivy classpath container. So for >> >>>> new >> >>>>>>> Liferay projects that are created by our "New Liferay Project >> >>>> wizard" >> >>>>> in >> >>>>>>> our plugins, I want to go ahead and automatically configure that >> >>>>> project >> >>>>>> to >> >>>>>>> have all the IvyDE goodness, (nature, container, pre-resolve the >> >>>>>> container, >> >>>>>>> deployment assembly configuration). In order to test things out I >> >>>>> forked >> >>>>>>> the latest trunk on git hub and imported it into my Eclipse SDK >> >>> dev >> >>>>>>> environment. I then went and built a POC for integration of >> >>> Liferay >> >>>>>> plugin >> >>>>>>> projects enhanced with IvyDE settings. During this process I >> >>>> noticed >> >>>>>> that >> >>>>>>> for our use-cases it seems it will require a few change to IvyDE >> >>> to >> >>>>>> support >> >>>>>>> what we want to do: >> >>>>>>> >> >>>>>>> >> >>>>>>> 1. MANIFEST.MF on the eclipse plugin bundle to export all >> >>> packages >> >>>>> (so >> >>>>>>> they can be called from 3rd-party plugins like ours) >> >>>>>> >> >>>>>> The API of IvyDE was never properly maintained. Adding new features >> >>> or >> >>>>>> fixing bugs often involved changing/adding/removing some classes or >> >>>>>> methods. I fear that if you rely blindly on the IvyDE "API", we may >> >>>>> break >> >>>>>> your plugin in the long run. >> >>>>>> Maybe with your input we can start building a real API. Only the >> >>>> useful >> >>>>>> package would be exposed. Only the useful classes. And then we will >> >>>> make >> >>>>>> sure that IvyDE won't break the API of these classes. >> >>>>>> We could start with the list of classes of IvyDE you are actually >> >>>> using. >> >>>>>> >> >>>>> >> >>>>> That makes total sense. However, I feel that you should follow the >> >>> same >> >>>>> pattern as Eclipse team itself. Put an API division between API and >> >>>>> "internal" classes by putting "internal" in package path, but still >> >>> you >> >>>>> can >> >>>>> export everything. Because in many cases you can't fully know how >> >>>>> adopters >> >>>>> will use the plugin and you wouldn't want to prohibit the use of it >> >>> out >> >>>> of >> >>>>> the box just because the packages were exported people end up having >> >>> to >> >>>>> fork the project just to use it for a specific release. If all >> >>> packages >> >>>>> were exported but some marked internal then those programmers will >> >>> have >> >>>>> already been warned by eclipse and if they choose to ignore it, it >> is >> >>> on >> >>>>> them if the API breaks in the future. This way we can have best of >> >>> both >> >>>>> worlds. :) >> >>>>> >> >>>>> >> >>>>> But regardless, currently in my first integration attempt I'm using >> >>> the >> >>>>> following classes: >> >>>>> >> >>>>> org.apache.ivyde.eclipse.IvyNature >> >>>>> org.apache.ivyde.eclipse.cpcontainer.ClasspathSetup; >> >>>>> org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainer; >> >>>>> >> org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainerConfAdapter; >> >>>>> >> >>> >> org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainerConfiguration; >> >>>>> org.apache.ivyde.eclipse.cpcontainer.SettingsSetup; >> >>>>> org.apache.ivyde.eclipse.retrieve.RetrieveSetup; >> >>>>> >> >>>>> Here is the code where you can see I'm calling the ivy classes: >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>> >> >> >> https://github.com/gamerson/liferay-ide/blob/94e2cde3e3e2b65587efc03b2247f5a984088420/tools/plugins/com.liferay.ide.portlet.jsf.core/src/com/liferay/ide/portlet/jsf/core/JSFPortletFrameworkWizardProvider.java#L300 >> >>> >> >>>> >> >>>>> >> >>>>> >> >>>>> Right now that code is all messy and just a POC. But you can see >> that >> >>>> I'm >> >>>>> doing 3 things: >> >>>>> -adding ivy nature >> >>>>> -adding ivy classpath container >> >>>>> -running "resolve" on classpath container >> >>>>> >> >>>>> >> >>>>>>> 2. Improved support in ResolvedPath.java class to support >> >>> relative >> >>>>>> paths >> >>>>>>> that use the "../" parent path. >> >>>>>> >> >>>>>> The problem with relative paths is that they got messed up while >> >>> being >> >>>>>> used within the java launcher. Maybe you can share your use case so >> >>> we >> >>>>> can >> >>>>>> figure out a proper way to solve it ? For instance it would be nice >> >>> if >> >>>>> you >> >>>>>> could provide a patch which is adding a test project [1]. >> >>>>>> >> >>>>> >> >>>>> Sure thing, I can add a test project. In my scenario with Liferay >> >>> IDE, >> >>>>> all >> >>>>> of our Ivy Projects will live in a parent folder structure that will >> >>>>> contain some shared Ivy configuration settings and also a shared ivy >> >>>>> cache. So when I configure the Ivy container, I need to use >> relative >> >>>>> paths >> >>>>> for the IvySettings file and the IvyUserDir like this: >> >>>>> >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>> >> >> >> https://github.com/gamerson/liferay-ide/blob/94e2cde3e3e2b65587efc03b2247f5a984088420/tools/plugins/com.liferay.ide.portlet.jsf.core/src/com/liferay/ide/portlet/jsf/core/JSFPortletFrameworkWizardProvider.java#L376 >> >>> >> >>>> >> >>>>> >> >>>>> >> >>>>> something like this for settings file >> >>>>> file:../../ivy-settings.xml >> >>>>> >> >>>>> and this for user dir >> >>>>> ../../.ivy >> >>>>> >> >>>>> So with my modification to ResolvedPath below it fixes it for that >> >>>> issue, >> >>>>> although that code would need to be cleaned up before I submited the >> >>>> patch >> >>>>> :) >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>> >> >> >> https://github.com/gamerson/ivyde/blob/ca6db8f8b0f8b0b1c529a1e2aaaa565b37d9a5e2/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ResolvedPath.java#L103 >> >>> >> >>>> >> >>>>> >> >>>>> >> >>>>> >> >>>>>> >> >>>>>> >> >>>>>>> You can see that I have forked the IvyDE repo over on my github >> >>>>> account >> >>>>>> and >> >>>>>>> made a few commits: >> >>>>>>> https://github.com/gamerson/ivyde/commits/liferay-ide >> >>>>>>> >> >>>>>>> Several of those commits are just my hacks in order to build the >> >>> POC >> >>>>> in >> >>>>>> my >> >>>>>>> dev environment, e.g. setting up a tycho build instead of >> >>> ant-based >> >>>>>> build. >> >>>>>>> The only two interesting commits are the following: >> >>>>>>> >> >>>>>>> Modified the Manifest to export all *eclipse* packages >> >>>>>>> >> >>>>>> >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>> >> >> >> https://github.com/gamerson/ivyde/commit/29a4e2e9f4e27aabfe44f0227683a5ec20c8bc01 >> >>> >> >>>> >> >>>>> >> >>>>>>> >> >>>>>>> Modified ResolvedPath to add support for "../.." style paths: >> >>>>>>> >> >>>>>> >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>> >> >> >> https://github.com/gamerson/ivyde/commit/ca6db8f8b0f8b0b1c529a1e2aaaa565b37d9a5e2 >> >>> >> >>>> >> >>>>> >> >>>>>>> >> >>>>>>> I'd like to discuss with IvyDE maintainers on how I can get these >> >>>> two >> >>>>>>> changes merged into trunk. I can create JIRA tickets and submit >> >>>>> proper >> >>>>>>> pull requests, or however, you would prefer me to try to >> >>> contribute. >> >>>>>> >> >>>>>> The way to contribute code is to go through Jira. So it somehow >> >>>> clearly >> >>>>>> state that you do want to contribute your patch to the ASF, and we >> >>> are >> >>>>> not >> >>>>>> picking code from you with an unclear license. (You could probably >> >>> do >> >>>> a >> >>>>>> pull request, but I don't know where it would actually go…) >> >>>>>> >> >>>>> >> >>>>> Sure thing, I'll open JIRA ticket with the API export and the >> >>>> ResolvedPath >> >>>>> as those are the two blockers right now. >> >>>>> >> >>>>> >> >>>>>> >> >>>>>>> Hope to hear from you all soon and thanks again for the great >> >>> IvyDE! >> >>>>>> >> >>>>>> Thank you for coming here discussing here ! :) >> >>>>>> >> >>>>> >> >>>>> Absolutely! and thanks for responding so quickly. >> >>>>> >> >>>>> >> >>>>>> >> >>>>>> Nicolas >> >>>>>> >> >>>>>> [1] https://svn.apache.org/repos/asf/ant/ivy/ivyde/trunk/test >> >>>>>> >> >>>>>> >> >>>>>> >> >>> --------------------------------------------------------------------- >> >>>>>> To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org >> >>>>>> For additional commands, e-mail: dev-h...@ant.apache.org >> >>>>>> >> >>>>>> >> >>>>> >> >>>>> >> >>>>> -- >> >>>>> Greg Amerson >> >>>>> Liferay Developer Tools >> >>>>> Liferay, Inc. www.liferay.com >> >>>>> >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>>> -- >> >>>> Greg Amerson >> >>>> Liferay Developer Tools >> >>>> Liferay, Inc. www.liferay.com >> >>>> >> >>>> >> >>>> >> >>> >> >>> >> >>> -- >> >>> Greg Amerson >> >>> Liferay Developer Tools >> >>> Liferay, Inc. www.liferay.com >> >>> >> >>> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org >> >> For additional commands, e-mail: dev-h...@ant.apache.org >> >> >> >> >> > >> > >> > -- >> > Greg Amerson >> > Liferay Developer Tools >> > Liferay, Inc. www.liferay.com >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org >> For additional commands, e-mail: dev-h...@ant.apache.org >> >> > > > -- > Greg Amerson > Liferay Developer Tools > Liferay, Inc. www.liferay.com > -- Greg Amerson Liferay Developer Tools Liferay, Inc. www.liferay.com