【问题标题】:How to modify a file contained in a JAR that is a dependency in IntelliJ如何修改包含在 JAR 中的文件,该文件是 IntelliJ 中的依赖项
【发布时间】: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


【解决方案1】:

1) 我可以将仅包含 .scala 文件的 jar 文件放到 lib 文件夹中并期望它运行吗?

这是不可能的,因为 jar 文件应该包含类文件,scala 文件将作为资源而不是源文件处理。

2) 要删除依赖关系,是否将 build.sbt 文件中的行注释掉,然后运行 ​​sbt update 就够了吗?

我会改为运行sbt clean,我没有尝试过,但sbt "show unmanagedBase" 应该会列出你的图书馆,如果它真的被选中了。

3) 假设将 jar 文件作为依赖项运行的唯一方法是使用包含 .class 文件的 jar 文件。如果我没有任何其他项目文件,如 build.sbt 文件,如何使用 .scala 文件重建包含 .class 文件的 jar?我有源文件,但如果没有 Scala 项目中通常打包的所有其他信息,我不确定如何使用它来重新创建 jar。

理想的方法是找到该源的完整存储库,更新源并运行sbt publishLocal,如果不可能,另一种方法是重建build.sbt 并继续添加库,直到库正确编译,希望它没有依赖关系,或者只有几个。

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2015-04-04
    • 2018-07-09
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多