依赖的Maven内部属性

时间:2017-07-27 08:50:28

标签: maven elasticsearch lucene dependencies carrot2

Tech:Maven 3 + IntelliJ + ElasticSearch 5.5.0 + Carrot2 3.15.1

我有一个Carrot2和ElasticSearch的项目,它引发了一些冲突。 Carrot2使用Lucene 5.3.1而ElasticSearch使用6.3.1版本。我想强制carrot2使用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在外部依赖中使用我的项目属性值?

1 个答案:

答案 0 :(得分: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>

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

步骤: Maven清洁 - &gt;重新导入所有Maven项目 - &gt;重建

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