【发布时间】:2019-12-11 13:55:36
【问题描述】:
我在 Intellij-Idea 中使用 Scala,但遇到了问题。我已经包含了 Java 标记,以防有 Java 经验的人也可以回答我的问题。
在我正在使用的某个依赖项的 .ivy2/cache 文件夹中,有两个 jar 文件。一个包含 .class 文件,一个包含 .scala 源文件。我希望能够修改其中一个 jar,将其放入我的 lib 文件夹中,然后使用包含我所做更改的 jar 运行我的程序。
我有一个问题。我可以使用 jar uvf 修改源文件夹中的文件,但是当我将它放到 lib 中并运行它时,更改不会显示出来。我尝试在 build.sbt 文件中注释掉依赖项,但即使在我运行 sbt update 之后,它似乎仍在使用我的旧依赖项。
我的问题可以分为几个部分:
1) 我可以将仅包含 .scala 文件的 jar 文件放到 lib 文件夹中并期望它运行吗?
2) 要删除依赖关系,是否在我的 build.sbt 文件中注释掉该行,然后运行 sbt update 是否足够?
3) 假设将 jar 文件作为依赖项运行的唯一方法是使用包含 .class 文件的 jar 文件。如果我没有任何其他项目文件(如 build.sbt 文件),如何使用 .scala 文件重建包含 .class 文件的 jar?我有源文件,但如果没有 Scala 项目中通常打包的所有其他信息,我不确定如何使用它来重新创建 jar。
我只使用 Intellij 来编辑我的文件,并使用 sbt 来运行代码。
【问题讨论】:
-
在运行时没有任何 Scala 文件,只有带有 JVM 字节码的 class 文件。 - 你需要重建那个依赖。
-
这是不可能的;您需要获取源存储库,配置不同的版本,然后将其上传到本地 maven 存储库。即便如此,这也只能在本地工作——您需要在 CI 工具中构建自定义代码,然后发布到通常可访问的 Maven 存储库,以便其他构建工作。那么问题就变成了:你为什么要破解库代码?
-
我要修改的库在我们的单元测试中抛出异常,需要不切实际的解决方法。直接的解决方案是通过使用一些 println 语句来暴露有问题的封装对象的状态,从而更好地理解问题。
-
使用调试器可以为您提供这些知识。
标签: java scala intellij-idea jar