好的,所以我有我的 Java 项目,在项目资源管理器的 Maven 依赖项目文件夹下,我遇到了一个jar文件夹,其中有一个.class文件。现在,我单击了Download Sources,我可以将.class文件作为 Java 文件查看,但我无法在 Eclipse 中对其进行编辑。
我应该怎么办?
您不能编辑.class文件。您只能编辑java源代码中包含的文件并重新编译。
下载的源是在给定时间为给定项目maven生成的项目快照maven source plugin,以帮助调查代码,但肯定不会修改它。
这些源可以绑定到类路径并用于在 IDE 中导航项目源,但它们仍然是只读的。
您不能直接编辑 jar 和源 jar。您需要下载源代码并对其进行编辑。然后,您必须通过构建过程来重新构建 jar,并将其作为新版本安装在您的 maven 存储库中。
类文件是编译后的二进制文件,准备成为可执行程序的一部分。
修改它们是修改已编译源代码的艺术。你可能不想这样做。如果要生成替换,请下载整个项目并重新编译。
在这样的行动下,您可能有义务做某些其他事情,根据法律,您必须遵守软件的许可,并且重新编译和重新分发(如果您必须重新编译,您将这样做)通常会给您带来更重的负担开发人员不仅仅是“使用”(取决于许可)。
如前所述,您不能修改 .class 文件。如果可用,您可以通过以下方式下载依赖项的源 java 文件:
mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc
(对于困惑的读者:它是关于 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)方法,当然工作区解析再次无法正常工作,这是正确的.)