我们有直到最近还在JDK8上的maven应用程序。我们刚刚将它们升级到JDK11,并试图通过将我们的实用程序库变成模块来利用JDK9的JPMS。
我们原来有这样的路径:
utils/some-library1/src/main/java/com/company/team/utils/lib1/Util1.java
在那里,java
是"源根"。
因此,一位同事放置了模块信息。lib1文件夹中的java文件,并将其声明为:
module utils.lib1 {
exports com.company.team.utils.lib1;
}
从构建和工作的命令行,所以他假设一切都是模块的善良。
但当我在Intellij中打开时,它有一条难看的红线,消息说我应该将它移到源根目录。然后将其移动到上面的“java”文件夹中。很公平。
这让我四处寻找,试图了解更多关于我同事实现的JPMS的信息。经过大量的搜索和实验,我还决定将“java”文件夹作为“sourceroot”重命名为模块名称(“utils.lib1”)。现在我有两个文件:
utils/some-library1/src/main/utils.lib1/module-info.java
utils/some-library1/src/main/utils.lib1/com/company/team/utils/lib1/Util1.java
甚至Intellij也很开心。好极了所以我重构了所有其他库。突然,我遇到了一个大问题,我们用这句话把它叫做lib2:
module utils.lib2 {
exports com.company.team.utils.lib2;
requires java.ws.rs;
}
Intellij再次用红色错误曲线标记模块,这次说:
模块的utils。lib2“读取包”javax。从雅加达“双方”激活。“激活”和“雅加达”。激活'
我做了一些调查,发现了以下内容:
java.ws.rs拉入以下之一(这取决于哪个应用程序):
他们的模块信息。java
文件包含以下行:
需要可传递的java。xml。束缚
其中一个:
雅加达。xml。bind-api-2.3。2.罐子
它们都有这一行:
需要可传递的雅加达。激活
这就是我放弃的地方。我们的库是很难完全解析的大东西,所以为了简化,我创建了一个只有一个类的maven应用程序,它所做的就是导入javax.ws.rs.core.链接。
IntelliJ仍然给出了我无法理解的疯狂错误,谷歌一直坚决拒绝告诉我。
是真的坏了还是Intellij和我一样困惑?
我讲了这么长的故事,既是为了展示我们所做的工作,也是为了让大家知道我对模块非常陌生。如果是件简单的事,请原谅。我只是被难住了。
此外,是否有任何可以在命令行执行的明显测试来验证模块配置?
我在jdeps、javac和实际运行中的运气不一致,这是问题的标志。
我的怀疑是,事情现在才工作,因为它们都在未命名的模块中。但是如果我要说服任何人改变它,我需要让一切运转起来。
编辑
据报道,这个问题已经得到了回答,但这是不正确的。建议的链接涉及两个不同的包(A
此外,还有第二个问题也很重要,但尚未解决:如何从命令行验证模块配置(根本不涉及IDE)。
我在Intellij遇到了完全相同的警告,这是真实的。在我的例子中,冲突来自使用相同模块名称的三个独立的依赖项(即jakarta.activation):
它通过对拉动最后两个的依赖项应用显式排除来解决我的项目。
我还确定了“java”文件夹,作为“源根”,应该重命名为模块的名称
不,不应该。java源根应该保持原样,但是你必须创建一个与你的模块名相对应的包名,所以它应该是/src/main/java/
-Source root,然后是utils/lib1
目录-whidh会是包裹。
问题内容: 我正在尝试在节点中使用Express,安装一切正常,进行编译,获取npm并通过以下方式安装express: npm安装快递 问题是,每次我尝试“要求”它时,都会给我一个错误!看一下一个简单的文件app.js: 当我运行它时: 有人能帮我吗?为什么会出现此错误?如何安装与Express不同的版本? 问题答案: 问题是,你可能有最新的连接(而不是“您需要安装最新的连接”)的命令@Shrip
问题内容: 因此,当我在Java中使用Doubles进行加法或减法时,它会给我带来奇怪的结果。这里有一些: 如果我加上,它给了我。没错 如果我添加,它会给我(重复s 的数量可能会关闭)。错了 如果我减去,它就会给我(再次,重复的s可能会关闭)。错了 起初我以为这只是将双精度数与十进制值相加的问题,但我错了。以下工作正常: 现在,添加的第一个数字是保存为变量的双精度数,尽管第二个变量从捕获文本。例如
我想用fsolve数值求解一个非线性超越方程的根。 下面的代码执行此任务。
问题内容: 可以正常工作,但是想要像这样测试开发分支: 不知道这是怎么回事?如果我做得到相同的结果 问题答案: 所需的软件包具有依赖关系。在1.3.3版中,他们开始使用不带版本后缀的go模块,现在明确指示该版本不再起作用。 如果要在不更新其依赖项的情况下使用devel包,请使用不带标志。 存储库中有关于此问题的公开拉取请求:https : //github.com/gdamore/tcell/pu
我在Digitalocean上安装了一个VPS服务器。安装了Ubuntu 18.04、LAMP等。最后,我安装了ffmpeg。它在终端上运行良好,但当我尝试通过php执行它时,会出现一个奇怪的“权限被拒绝”错误: 以下是一些信息: root@vl:/#何去何从ffmpeg ffmpeg: /usr/local/bin/ffmpeg root@vl:/#何去何从ff探针: /usr/local/bi
我在摆弄弹力靴,但每向前走一步,就会让我后退两步。 我将我的简单应用程序与Springboot连接在一起,但我没有得到这个错误: 还有这一点: 我不用任何数据库。应用程序非常简单。下面是主要的类: 下面是其他两个类和: 就是这样。尽管它可能很简单。 下面是文件结构以及build.gradle文件内容: 能有人请帮助我让这个小程序运行,指出我在正确的方向,以解决这个问题? 事先好心谢谢你。