[
https://issues.apache.org/jira/browse/HIVE-4187?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13604504#comment-13604504
]
Carl Steinbach commented on HIVE-4187:
--------------------------------------
bq. I do think that dependencies specified in fewer places leads to something
that's easier to maintain.
Clearly we're incapable of maintaining the discipline necessary to keep these
files up to date. What you're proposing sounds like the most pragmatic
alternative. However, we should do this the right way instead of abusing
transitive dependencies. Ivy has supported a parent descriptor inheritance
mechanism since version 2.2 that would allow us to consolidate all of the
submodule dependencies into a single parent file. More details are here:
http://ant.apache.org/ivy/history/latest-milestone/ivyfile/extends.html
bq. Having said that, I was simply jumping on this one first, because a broken
build seems more urgent and I want to fix that right away. However, in order to
do that I would like to know how your build is broken. Ivy should pick up the
right version, the build machine doesn't have the problem and I can't reproduce
it. Do you have any pointers?
The root cause of this problem is that Ivy and/or Ant is failing to enforce a
deterministic ordering for elements in the generated classpath. This wouldn't
be an issue if we managed our dependencies correctly, but obviously we don't:
{code}
% ant clean package
...
% find . -name "antlr*.jar"
./build/ivy/lib/default/antlr-2.7.7.jar
./build/ivy/lib/default/antlr-3.0.1.jar
./build/ivy/lib/default/antlr-3.4.jar
./build/ivy/lib/default/antlr-runtime-3.0.1.jar
./build/ivy/lib/default/antlr-runtime-3.4.jar
{code}
Version 3.4 is the only thing we should be retrieving, but because of a
transitive dependency we're also pulling down 3.0.1 and 2.7.7. HIVE-4148 did
not cause this problem -- it was already there -- but on my machine it seems to
have caused Ant/Ivy to alter the way it orders elements in the classpath. I
think it should be pretty easy to find the offending transitive dependency by
looking at the reports in build/ivy/report.
bq. A pure-red diff! Nothing better than removing code.
bq. Nice! Nothing like a patch that is entire deletes
I agree that removing unnecessary code has a lot of benefits. The problem is
that HIVE-4148 removed metadata, not code. The metadata that was removed were
statements of fact of the form "module A directly depends on module B". If we
decide that we're incapable of adequately maintaining these facts on a
per-module basis then I'm fine with using a global set of facts instead. I also
have no objection to removing inaccurate facts. However, I strongly object to
removing facts simply to make these files shorter.
> QL build-grammar target fails after HIVE-4148
> ---------------------------------------------
>
> Key: HIVE-4187
> URL: https://issues.apache.org/jira/browse/HIVE-4187
> Project: Hive
> Issue Type: Bug
> Components: Build Infrastructure
> Reporter: Carl Steinbach
> Assignee: Gunther Hagleitner
> Priority: Critical
>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira