Eclipse:从构建路径中排除“运行时”maven依赖项

时间:2015-12-01 16:36:21

标签: java eclipse maven primefaces itext

我有一个需要依赖iText 5.5.2和iText 2.1.7的项目(Primefaces在运行时需要这个特定版本,由于许可证问题,不能与iText 5一起使用)。

所以我在我的pom.xml中有这个:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.2</version>
    <scope>compile</scope>
</dependency>

<!-- iText 2.1.7 is necessary at runtime to have the 'Export to PDF' function of Primeface work -->
<!-- It won't conflict with iText 5 as the packages are different -->
<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
    <scope>runtime</scope>
</dependency>

问题是我不希望我们的开发人员能够从iText 2.1.7(com.lowagie。*包)导入类。我想强迫他们使用iText 5.5.2(com.itextpdf。* package)中的类。

尽管iText 2.1.7处于“运行时”范围,但Eclipse仍然在构建路径中添加了jar文件,允许开发人员导入错误的包(com.lowagie而不是com.itextpdf)。

有没有办法将其从构建路径中排除?

1 个答案:

答案 0 :(得分:1)

不幸的是,在具有正常构建的Eclipse上似乎不可能,这是一个已知错误,请检查Bug 414645Bug 376616。 Eclipse(m2e)无法正确管理Maven依赖范围。

但是,如果将运行时依赖项放在配置文件上,那么Eclipse将不会将它们添加到类路径中(但默认情况下,配置文件不应该处于活动状态)。我刚刚在Eclipse Mars上测试过,它运行得很好。

因此,在您的情况下,您可以添加到您的POM:

<profiles>
    <profile>
        <id>runtime</id>
        <dependencies>
            <dependency>
               <groupId>com.lowagie</groupId>
               <artifactId>itext</artifactId>
               <version>2.1.7</version>
               <scope>runtime</scope>
            </dependency>
        </dependencies>
    </profile>
</profiles>

因此,它不能用于在Eclipse上编译。但是,您的构建需要在运行时使用它,在这种情况下运行-Pruntime

虽然调整POM和构建IDE的问题可能并不理想,但实现目标可能是一个很好的折衷方案。