7

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

我应该怎么办?

4

5 回答 5

3

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

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

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

于 2013-02-26T21:40:40.027 回答
0

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

于 2013-02-26T21:40:52.607 回答
0

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

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

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

于 2013-02-26T21:42:55.733 回答
0

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

mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc
于 2013-10-23T22:50:56.437 回答
0

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

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

我们的(典型的 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)方法,当然工作区解析再次无法正常工作,这是正确的.)

于 2015-08-31T10:12:13.483 回答