Stanford-CoreNLP和Stanford-Parser中的Maven类名冲突

时间:2014-02-24 14:09:41

标签: java maven dependency-management stanford-nlp

My(maven)项目依赖于stanford-CoreNLP和stanford-Parser,显然每个依赖项的(词汇化)解析器产生不同的输出,它们不相同。

我的问题是如何确定应该从哪个包加载解析器?解析器类在两个包中都具有相同的名称:     edu.stanford.nlp.parser.lexparser.LexicalizedParser 和maven自动从stanford-coreNLP包加载类,而我希望它从stanford-Parser加载。

如果您能帮助我提出建议,我将不胜感激。

2 个答案:

答案 0 :(得分:5)

我会提出一个错误,要求他们将词法解析器移动到一个新的maven工件(或其中几个),这样你就可以区分它们。

如果没有发生,您有两种选择:

  1. 使用Maven阴影插件(由ooxi建议)
  2. 删除有问题的课程
  3. 第二种方法的细分:

    1. 使用您最喜欢的ZIP工具打开JAR存档。
    2. 删除有问题的软件包。
    3. 复制原始POM
    4. 将版本版本更改为1.1.MythBuster.11.1.no-lexer.1
    5. 使用mvn file:install在本地仓库中安装修改后的工件
    6. 测试
    7. 使用mvn deploy:deploy-file在公司的repo中安装修改过的工件
    8. 我更喜欢第二种方法,因为它确保构建有一个干净的类路径,人们知道你搞砸了原始文件,而且很明显发生了什么。

答案 1 :(得分:2)

我曾经遇到过这个问题并且可以通过使用虚拟包解决它,具体取决于两个冲突的依赖项(在您的情况下是stanford-CoreNPL和stanford-Parser)并使用Maven shade plugin合并它们。

当着色时,虚拟包中只有一个类,具体取决于<dependency />标记的顺序。