好的,所以我有我的 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)方法,当然工作区解析再次无法正常工作,这是正确的.)