[ https://issues.apache.org/jira/browse/IVY-387?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12627028#action_12627028 ]
Xavier Hanin commented on IVY-387: ---------------------------------- I've just resolved IVY-232, but I'm not happy of how we handle relative paths globally. With current trunk we have: * relative paths for properties and settings file in a settings file are relative to the settings file itself (see IVY-372 and IVY-89) * relative paths for configurations inclusion are relative to the Ivy file defining the inclusion * all other paths are relative to what is called Ivy settings basedir, which is by default the current execution directory, except when run from Ant, where it is the Ant basedir This means that relative paths for File attributes on resolvers and caches, for instance, are relative to the basedir, not the settings file. So if you have: {code} <ivysettings> <include file="relative/path/to/ivysettings2.xml" /> <caches repositoryCacheDir="relative/path/to/repository" /> </ivysettings> {code} Then the first relative path is relative to the settings file, the second is relative to the basedir. While I first considered unifying this by making all paths in settings file relative to the settings file itself, I realized this is not possible, because the settings can be loaded using an URL. To load properties or other settings it's not a problem because we can actually load them using an URL, but this is not possible to convert a generic URL to a File. So I don't know what's the best solution. IMO, the easiest to implement and the most uniform would be to make all paths in the settings relative to the basedir. In this case people who want to use paths relative to the settings file have to explicitly put ${ivy.settings.dir} before their path. This is slightly less user friendly. Another solution is to keep things as is, but I really don't like it. Yet another solution is to make all paths in settings file relative to the settings file as long as the settings are loaded as a file. In other cases, it would be relative to basedir. I don't like this solution either, because the behavior then depend on how you load your settings. So I'm definitely in favor of #1, but maybe some have other ideas or other opinion. > Absolute and relative path > -------------------------- > > Key: IVY-387 > URL: https://issues.apache.org/jira/browse/IVY-387 > Project: Ivy > Issue Type: Bug > Affects Versions: 1.4.1 > Reporter: Gilles Scokart > Assignee: Gilles Scokart > Fix For: 2.0-RC1 > > > There are a few of issues in Jira concerning absolute and relative path. > Currently all the path are resolved relatively to the execution. > The different issues are : > - includes in the ivyconf files (IVY-372) > - properties in the ivyconf files (IVY-89) > - include configurations in the ivy files (IVY-347) In all case, the path > should be resolved relatively to the including file, and not relatively to > the current execution task. > There is also at least an other issue concerning the path resulutiion in ant > task parameter (IVY-232). > I think all those problems should be fixed together in order to keep ivy more > consistent. However, there is a backward compatibility issue: some projects > (for which it is required to launch the build from the base directory) rely > on the fact that ivy use path relative to the current execution directory. > And if they reference files that are not in the base directory, the change > will break their build. > The first project in that case is ivy itself! Try 'ant -f ivy/build.xml test' > and you will see plenty of test failing. > Comment from Xavier on the mailing list : > What could be done is have a single setting somewhere saying if relative > paths resolution should be done in backward compatible mode, or new mode. The > default could even be new mode, if it's clearly documented. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.