GWT(Maven)项目:依赖冲突

GWT (Maven) project: Dependency conflict

我有一个具有以下依赖项的 GWT 项目

    <dependency>
        <groupId>com.google.gwt.inject</groupId>
        <artifactId>gin</artifactId>
        <version>2.1.2</version>
    </dependency>

    <dependency>
        <groupId>net.sourceforge.owlapi</groupId>
        <artifactId>owlapi-distribution</artifactId>
        <version>4.0.2</version>
    </dependency>

我有哪些选择才能完成这项工作?我能否以某种方式使用依赖范围,同时仍保留正常运行的 GWT DevMode?

对于我在依赖范围方面的 maven 经验来说,这是一个复杂的场景。

鉴于您得到的错误提到番石榴,您可能会幸运地强制使用最新的番石榴 - owlapi 应该适用于 17 或 18。

另一种选择可能是尝试使用 guice 4 重新编译 gin(并可能在上游贡献更改)。我不知道这有多难。您还必须确保您的快照与您的应用一起发布,并且您团队中可能需要它们的其他人可以访问。

将您的项目拆分为不同的模块。鉴于 Maven 的有限(设计)依赖范围选项,这确实是可行的方法。

客户端代码使用一个模块,仅使用客户端依赖项(GIN with Guice 3),服务器端代码使用一个模块,仅使用服务器依赖项(OWLAPI with Guice 4);并让您的客户端模块将您的代码编译为 JS 并将它们打包为 WAR,您可以在服务器模块中将其用作 "overlay"(或者可能使用依赖于客户端和服务器的第三个模块如果你比较喜欢)。如果您有共享代码,请使用客户端和服务器模块都依赖的 third/fourth 共享模块;共享模块将调用 maven-source-pluginjar-no-fork 目标,因此客户端模块可以依赖于共享源。

您可以在 https://github.com/tbroyer/gwt-maven-archetypes. They use my Maven Plugin for GWT 找到遵循此方法的原型,但早期版本(您必须克隆并 mvn install 项目然后从适当的提交中)依赖于 Mojo 的 GWT Maven 插件(我的插件在设计时考虑了多模块项目,并删除了以前使用 Mojo 插件时需要的很多 hack)。

物有所值。我花了几分钟 "ported" 来指导 4.0。幸运的是,这很容易。我对其进行了优化,否则代码库几乎没有任何变化。

https://github.com/chinshaw/google-gin