2013-02-26 37 views
4

好吧,我有我的Java項目,並且在項目瀏覽器中的Maven依賴項目文件夾下,我遇到一個jar文件夾,並且在其中有一個.class文件。現在,我點擊Download Sources,我可以將.class文件視爲Java文件,但我無法在Eclipse中對其進行編輯。如何在Eclipse中編輯Maven依賴關係中的`.class`文件

我該怎麼辦?

+5

爲什麼你認爲你應該可以編輯它? – Cephalopod 2013-02-26 21:39:38

+0

@Cephalopod:因爲他在這裏陳述:http:// stackoverflow。com/questions/15099790 /如何編輯class-file-in-maven-dependency-in-eclipse#comment21243106_15099901依賴於項目是他自己的(在工作區中) – 2015-08-31 09:41:27

回答

2

您無法編輯.class文件。您只能編輯源代碼中包含的java文件並重新編譯。

maven下載的來源是maven source plugin在給定時間爲給定項目生成的項目SNAPSHOT,用於幫助調查代碼,但肯定不會修改它。

這些源可以綁定到類路徑並用於在IDE中瀏覽項目源,但它們仍然是隻讀的。

+0

你甚至不能編輯.class文件如果您有權訪問源代碼。您只能重新編譯源代碼。 – 2013-02-26 21:45:20

+0

@JeffStorey但仍然無法將.class文件編輯爲java文件?這就是我的意思。爲什麼要投票? – 2013-02-26 21:46:16

+0

我不關注。你不能編輯類文件(不修改字節碼)。如果你的意思是你可以重新編譯源代碼,那麼你應該這麼說。 – 2013-02-26 21:47:41

0

您無法直接編輯罐子和源罐。你需要下載源代碼並編輯它。然後,您必須經過構建過程來重新構建jar,並將其作爲新版本安裝到您​​的maven存儲庫中。

0

類文件是編譯好的二進制文件,可以作爲可執行程序的一部分。

修改它們是修改已編譯源代碼的技巧。你可能不想這樣做。如果您想要生成替換,請下載整個項目並重新編譯它。

在這樣的行爲下,您可能有義務做其他事情,法律規定您必須遵守軟件許可,並重新編譯和重新分發(如果您必須重新編譯,您將會這樣做)開發人員的負擔比「使用」(取決於許可)要重得多。

+0

是的,軟件和項目屬於我,我總是在Eclipse中重建項目。 – bouncingHippo 2013-02-26 21:44:12

+0

如果依賴軟件和它的項目屬於你,爲什麼你在重新編譯它的問題?更改上游依賴項(上游Maven項目)並重新發布。可能性是您的項目對其他項目有依賴性,並且替代原來的其他項目將違反Maven在不同機器上重現結果的所有能力。 – 2013-02-26 22:47:12

0

如前所述,您不能修改.class文件。如果有通過你可以下載依賴的源java文件:

mvn dependency:sources 
mvn dependency:resolve -Dclassifier=javadoc 
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)方法,當然這裏的工作空間解析會再次不正常工作)。

+0

(如果我們仔細查看打開的類文件(在CTRL + RIGHT-CLICK),我們會看到它正在尋找一個不同版本的jar {{user.home} /。m2 /.../ projx-ejb-1.0.3.Final.jar!/ ...'在我們的本地maven回購):-) – 2015-08-31 10:15:52