我有一个项目需要依赖 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.* 包)中的类。
虽然 iText 2.1.7 处于“运行时”范围,但 Eclipse 仍然在构建路径中添加 jar 文件,从而允许开发人员导入错误的包(com.lowagie 而不是 com.itextpdf)。
有没有办法将其从构建路径中排除?
最佳答案
不幸的是,在正常构建的 Eclipse 上似乎不可能,这是一个已知的错误,请检查 Bug 414645和 Bug 376616 。 Eclipse (m2e) 无法正确管理 Maven 依赖项范围。
但是,如果您将运行时依赖项放在配置文件上,那么 Eclipse 不会将它们添加到类路径中(不过,配置文件默认情况下不应处于 Activity 状态)。我刚刚在 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
运行。
虽然根据 IDE 问题调整 POM 和构建可能并不理想,但它可能是实现您的目标的一个很好的折衷方案。
关于java - Eclipse:从构建路径中排除 'runtime' maven 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34025345/