1

技术:Maven 3 + IntelliJ + ElasticSearch 5.5.0 + Carrot2 3.15.1

我有一个带有 Carrot2 和 ElasticSearch 的项目,这引起了一些冲突。Carrot2 使用 Lucene 5.3.1,ElasticSearch 使用 6.3.1 版本。我想强制胡萝卜2 使用 6.3.1 Lucene 版本来修复它。

我试图在我的项目的主 pom 文件中添加一个属性:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.8</java.version>
    <elasticsearch.version>5.4.2</elasticsearch.version>
    <org.apache.lucene.version>6.5.1</org.apache.lucene.version>
</properties>

不幸的是,这种方式仍然会引发由 Lucene 版本冲突引起的错误。最后,我通过更改胡萝卜的依赖 pom 文件的内部值找到了本地机器的解决方案:

<parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>5</version>
</parent>

<groupId>org.carrot2</groupId>
<artifactId>carrot2</artifactId>
<version>3.15.1</version>

<name>Carrot2</name>
(...)
<properties>
(...)
    <org.apache.lucene.version>6.5.1</org.apache.lucene.version>     
    <org.simpleframework.version>2.7.1</org.simpleframework.version>
    <org.carrot2.attributes>1.3.1</org.carrot2.attributes>
</properties>

它工作正常,但只在我的本地机器上。在胡萝卜的 pom 文件中更改的 Lucene 版本似乎没有传播,并且需要在任何项目实例上手动更改此版本。是否有可能强制 maven 在外部依赖中使用我的项目属性值?

4

1 回答 1

0

@Val 谢谢。一点解释:

我曾尝试在问题的最开始添加排除项,但仅限于lucene-core. 它在我的 Windows 机器上不起作用,但似乎在另一个基于 linux 的平台上正常工作。我添加了以下排除项,它似乎适用于任何机器:

<dependency>
    <groupId>org.carrot2</groupId>
    <artifactId>carrot2-core</artifactId>
    <version>3.15.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-backward-codecs</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-highlighter</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-memory</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-smartcn</artifactId>
        </exclusion>
    </exclusions>
</dependency>

然而,在我的 ubuntu + intellij17 + maven 3.3.9 上返回只有一个排除 lucene-core 工作正常,但在 windows + intellij14 + maven 3.3.3 上不起作用。

程序: Maven clean -> 重新导入所有 Maven 项目 -> 重建

似乎两种配置都有不同的重建/缓存策略,这让我感到困惑。

于 2017-07-27T10:11:39.303 回答