我有一个需要依赖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)。
有没有办法将其从构建路径中排除?
答案 0 :(得分:1)
不幸的是,在具有正常构建的Eclipse上似乎不可能,这是一个已知错误,请检查Bug 414645和Bug 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的问题可能并不理想,但实现目标可能是一个很好的折衷方案。