Eclipse:从构建路径中排除 'runtime' Maven 依赖项
Eclipse: exclude a 'runtime' maven dependency from the build path
我有一个项目需要依赖 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 在 'runtime' 范围内,Eclipse 仍然在构建路径中添加 jar 文件,允许开发人员导入错误的包(com.lowagie 而不是 com.itextpdf ).
有没有办法将其从构建路径中排除?
不幸的是,在正常构建的 Eclipse 上似乎不可能,这是一个已知错误,请检查 Bug 414645 and 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 的问题进行构建可能并不理想,但这可能是实现您的目标的一个很好的折衷方案。
我有一个项目需要依赖 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 在 'runtime' 范围内,Eclipse 仍然在构建路径中添加 jar 文件,允许开发人员导入错误的包(com.lowagie 而不是 com.itextpdf ).
有没有办法将其从构建路径中排除?
不幸的是,在正常构建的 Eclipse 上似乎不可能,这是一个已知错误,请检查 Bug 414645 and 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 的问题进行构建可能并不理想,但这可能是实现您的目标的一个很好的折衷方案。