我正在尝试切换到 GWT 2.10 和 Java 11(使用 Eclipse 容器作为 GWT,使用 gradle 来获取依赖项),但是因为一些 java 包捆绑在 gwt-user.jar 中,所以出现错误:
The package javax.xml.parsers is accessible from more than one module: <unnamed>, java.xml
在网上搜索,我发现的解决方案是通过删除软件包来重新打包 gwt-user.jar 或将我的项目变成一个模块(我不认为这是推荐的,而且我也不知道有什么影响/连锁反应有)。这两个选项似乎都不好。
有其他方法可以解决这个问题吗?
最后,我通过从 com.google.gwt 捆绑包获取依赖项解决了我的问题。但我在这里遇到了很多问题,因为我使用的是 gwt 材料,当时它也获得了“大罐子”依赖项。所以我的 gradle 现在看起来像这样:
//for Eclipse with GWT plugin (which creates the gwt classpath container):
classpath {
...
containers GWT_CONTAINER //from my gradle properties - com.gwtplugins.gwt.eclipse.core.GWT_CONTAINER/gwt-2.10.0
}
def gmdVersion = '2.6.0' //library GWT Material
def gwtVersion = GWT_VERSION//from my gradle properties file - 2.10.0
def gwtNamespace = 'com.google.gwt' //org.gwtproject in the future i think
api (group: "${gwtNamespace}", name: 'gwt-dev', version: GWT_VERSION)
api (group: "${gwtNamespace}", name: 'gwt-user', version: GWT_VERSION)
api (group: 'com.github.gwtmaterialdesign', name: 'gwt-material', version: "${gmdVersion}") {
exclude group:"${gwtNamespace}", module: "gwt-user"
exclude group:"${gwtNamespace}", module: "gwt-dev"
...
}
api (group: 'com.github.gwtmaterialdesign', name: 'gwt-material-jquery', version: "${gmdVersion}") {
exclude group:"${gwtNamespace}", module: "gwt-user"
exclude group:"${gwtNamespace}", module: "gwt-dev"
...
}
api (group: 'com.github.gwtmaterialdesign', name: 'gwt-material-addins', version: "${gmdVersion}") {
exclude group:"${gwtNamespace}", module: "gwt-user"
exclude group:"${gwtNamespace}", module: "gwt-dev"
...
}
根据每个人的项目结构,其他一些依赖项也可能会导致类似的问题,因此如果这从一开始就不起作用,您需要检查从多个依赖项 jar 中导入了哪些其他类。或者,您可以尝试创建一个新项目,在其中可以模拟 GWT 相关类的错误(只是一个简单的新空项目,在其中配置基本依赖项),然后尝试此解决方案,它应该可以工作。
我遇到了同样的错误,只是 gwt-dev.jar 的 javax.xml.parsers 类与 JRE 冲突。它是通过使用 CTRL-SHIFT-T 并输入 javax.xml.parsers 来显示的。
我在 7zip 中打开 gwt-dev.jar 并删除了 javax.xml.parsers 文件夹,错误就从我的 GWT 项目中消失了。