【问题标题】:how to edit `.class` file in Maven dependency in Eclipse如何在 Eclipse 中编辑 Maven 依赖项中的 .class 文件
【发布时间】:2013-02-12 12:48:57
【问题描述】:

好的,所以我有我的 Java 项目,在项目资源管理器的 Maven 依赖项目文件夹下,我遇到了一个 jar 文件夹,其中有一个 .class 文件。现在,我单击了Download Sources,我可以将.class 文件作为Java 文件查看,但我无法在Eclipse 中对其进行编辑。

我该怎么办?

【问题讨论】:

标签: java eclipse maven jar


【解决方案1】:

(对于困惑的读者:它是关于 Eclipse 通过 Maven 配置知道如何跳转到已知/可用(可能是自己的)项目源文件来编辑它,当它通过一些以前打包的 jar 实际链接到代码中时(使用 @987654321 @里面的文件))

(我们也遇到了同样的问题,但经过一些调整后它之前已经工作了,我们花了相当长的时间来解决这个问题......)

我们的(典型 EAR 原型)目录结构:

[projx]
  |- [ejb]
       |- pom.xml
            ...
            <!-- A) PROBLEM: dependency resolution can't work in [web]/src/**/* -->
            <version>1.0-SNAPSHOT</version>

            <!-- B) OK: this is what we (and probably you) wanted -->
            <!-- <version>2.0.1-SNAPSHOT</version> -->
            ...
  |- [web]
       |- pom.xml
            ...
            <version>2.0.1-SNAPSHOT</version>
            ...
            <dependency>
                <groupId>...</groupId>
                <artifactId>projx-ejb</artifactId>
                <type>ejb</type>

                <!-- C) a specific older version here would help it as well 
                        if you need it -->
                <!-- <version>1.0.3.Final</version> -->

                <scope>provided</scope>
            </dependency>
            ...
  |- [ear]
       |- pom.xml
            ...
            <version>2.0.1-SNAPSHOT</version>
            ...
  |- pom.xml

       <project ...>
        ...
        <version>2.0.1-SNAPSHOT</version>
        ...
        <modules>
          <module>ejb</module>
          <module>web</module>
          <module>ear</module>
        </modules>
        ...

所以问题是我们忘记增加[ejb]/pom.xml//project/version (A))在类似于 B) 进行调整后(我们实际上引用了一个全局 [projx]/pom.xml//project/properties/projx.version 属性),它再次起作用就像一个魅力。

(如果我们明确地依赖于较旧的版本,例如 `projx-ejb-1.0.3.Final.jar,JAR 版本,我们可能会选择 C)方法,当然工作区分辨率再次不会正确地工作。)

【讨论】:

  • (如果我们更仔细地查看打开的类文件(在 CTRL+RIGHT-CLICK 上)我们会看到,它正在我们的本地 maven 中寻找不同版本的 jar {user.home}/.m2/.../projx-ejb-1.0.3.Final.jar!/...回购):-)
【解决方案2】:

如前所述,您不能修改 .class 文件。您可以通过以下方式下载依赖项的源 java 文件:

mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc

【讨论】:

    【解决方案3】:

    您无法编辑.class 文件。您只能编辑源代码中包含的java 文件并重新编译。

    maven 下载的源代码是maven source plugin 在给定时间为给定项目生成的项目SNAPSHOT,用于帮助调查代码,但肯定不会修改它。

    这些源可以绑定到类路径并用于在 IDE 中导航项目源,但它们仍然是只读的。

    【讨论】:

    • 即使您可以访问源代码,也无法编辑 .class 文件。您只能重新编译源代码。
    • @JeffStorey 但您仍然无法将 .class 文件编辑为 java 文件?这就是我的意思。为什么投反对票?
    • 我不关注。您不能编辑类文件(不修改字节码)。如果您的意思是您可以重新编译源代码,那么您应该这么说。
    【解决方案4】:

    类文件是编译后的二进制文件,准备成为可执行程序的一部分。

    修改它们是修改已编译源代码的艺术。你可能不想这样做。如果要生成替换,请下载整个项目并重新编译。

    在这样的行动下,您可能有义务做某些其他事情,根据法律,您必须遵守软件的许可,并且重新编译和重新分发(如果您必须重新编译,这就是您将要做的)通常会带来很多开发人员的负担不仅仅是“使用”(取决于许可)。

    【讨论】:

    • 是的,软件和项目属于我,我总是在 Eclipse 中重建项目。
    • 如果依赖软件和它的项目是你的,你为什么要重新编译它?更改上游依赖项(上游 maven 项目)并重新发布。很可能这是您的项目依赖于其他东西,并且用临时的其他东西代替原始项目将违反 Maven 在不同机器上重现结果的所有能力。
    【解决方案5】:

    您不能直接编辑 jar 和源 jar。您需要下载源代码并对其进行编辑。然后,您必须通过构建过程重新构建 jar,并将其作为新版本安装到您​​的 maven 存储库中。

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 2010-09-13
      • 1970-01-01
      相关资源
      最近更新 更多