[ 
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

Reply via email to