【问题标题】:Java Intellij: Make change on external lib code and take effect immediatelyJava Intellij:对外部库代码进行更改并立即生效
【发布时间】:2017-12-14 03:59:27
【问题描述】:

我正在使用 Intellij 开发 Java。现在我可以通过将源附加到 jar 库来调试我的外部库代码。但是现在我想对 lib 的源代码进行更改并使其立即生效,而无需重新打包到 jar 并再次包含到我的主项目中。我可以这样做吗?

【问题讨论】:

  • 我认为这是不可能的,您需要将您的更改编译回 jar 文件。顺便说一句,编辑外部 Java 库不是一个好习惯。你应该覆盖它然后修改你自己的代码。
  • 我认为 jrebel(一种商业产品)绝对允许这样做。我不确定,但我认为 IntelliJ remote debug 可能也可以工作。
  • 我很欣赏你的快速回归 ;-)

标签: java intellij-idea


【解决方案1】:

如果您有该库的源代码,请使用该源代码和add a dependency 在该模块上创建一个单独的模块,而不是使用库 jar。

并且要使 jar 库与源代码同步,您可以将 jar artifact 配置为从此库模块与项目构建一起构建。

【讨论】:

    【解决方案2】:

    从概念上讲,这不是一个好主意。

    任何东西都是外部库。然后它的部署工件是一个 JAR。或者它是一个“源项目”。

    换句话说:你想同时吃蛋糕。如果你找到了一种技术方法来破解你自己 - 你不应该去那里。因为它在概念上是错误的。

    如果问题主要是关于 动态 更新正在运行的 JVM - 为此您可以使用 JRebel 等工具。但这也要求您的 JVM 与 JRebel 代理一起运行(这对于测试/开发系统来说很好,但在生产环境中是不行的)。

    【讨论】:

    • 有没有像 JRebel 这样免费的工具?
    • @ThachHuynh 谷歌的术语是“java 代码热插拔”。例如,请参阅sites.google.com/a/athaydes.com/renato-athaydes/posts/…。郑重声明:我们正在使用 JRebel,是的,这需要花钱。但每一分钱都是值得的(当您的环境经常需要将代码交换到测试/开发系统时)。
    【解决方案3】:

    对于其他说这不是好的做法的答案,我同意,但有时它可能很有用。例如,当我想在向库提交包含建议更改的合并请求之前测试外部 jar 中的更改时。能够在本地对其进行测试很有用。

    我做的是

    1. 在本地克隆库
    2. 将 pom.xml 中的版本更改为不同的版本,例如testing-snapshot
    3. 在新克隆的项目中运行mvn clean install,将项目加载到本地m2文件夹中
    4. 在您希望新版本项目生效的主 pom.xml 中,将版本更改为您在步骤 2 中选择的版本。
    5. 现在重新加载所有 maven 项目,intellij 应该会选择这个新版本,您现在可以编辑源代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2016-03-30
      • 2016-11-26
      相关资源
      最近更新 更多