ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Greg Amerson <gregory.amer...@liferay.com>
Subject Re: Re: Re: IvyDE adopter use-cases
Date Wed, 03 Jul 2013 08:21:10 GMT
Hey Carsten,

On Wed, Jul 3, 2013 at 3:53 PM, <Carsten.Pfeiffer@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.amerson@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.Pfeiffer@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.amerson@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.lalevee@hibnet.org>wrote:
> >
> > > Hi Greg,
> > >
> > > Le 2 juil. 2013 à 12:16, Greg Amerson <gregory.amerson@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-unsubscribe@ant.apache.org
> > > For additional commands, e-mail: dev-help@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

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message