如何在Eclipse中编辑Maven依赖项中的`.class`文件

时间:2013-02-26 21:36:46

标签: java eclipse maven jar

好的,所以我有我的Java项目,在项目浏览器的Maven依赖项目文件夹下,我遇到了一个jar文件夹,其中有一个.class文件。现在,我点击Download Sources,我可以将.class文件视为Java文件,但我无法在Eclipse中编辑它。

我该怎么办?

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

您无法直接编辑jar和源jar。您需要下载源代码并进行编辑。然后,您必须完成构建过程以重新构建jar,并将其作为新版本安装在maven存储库中。

答案 2 :(得分:0)

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

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

您可能有义务在此类行为下做某些其他事情,依法通行,您必须遵守软件的许可,并重新编译和重新分发(如果您必须重新编译,这将是您将要做的事情)开发人员的负担比“使用”更重(取决于许可)。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

(我们遇到了同样的问题,但经过一些调整之前它已经有效了,我们花了很长时间来弄明白这一点......)

我们的(典型的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)方法,当然工作空间分辨率再也不会工作,正确。)