我現在面臨一個非常獨特的情況,需要一些建議: 我工作的這依賴於其他項目從我同一家公司的一個項目,現在我需要應用一些修改依賴。 我的問題是,依賴項的源代碼已經丟失,所以我唯一擁有的是存儲庫中的maven依賴項,以及相應的jar文件。 最重要的是,一些在使用JiBX解析器創建的Jar文件的類,映射一些XSD文件,我也沒有,所得類是合成的,我沒有發現反編譯器能夠正確處理它們。行家裝配之前替換類文件
所有這一切的唯一好處是類,我需要改變可適當反編譯,所以去了以下內容:
- 我反編譯了整個jar文件,並結束了與一些類(JiBx的 )有空或實施錯誤的方法。
- 我註釋掉的錯誤方法的身體有存根對象,應用所需的更改權類和重新編譯。
- 我把舊的Jar文件,打開它,並手動替換爲新老班。
而導致罐發揮預期。
現在我的問題是:我可以做的一切使用Maven的?
的想法是把JiBX的類文件的資源,並保留存根等價物源文件,然後讓行家:
- 編譯一切都像往常一樣,把所有的編譯的類文件 成目標文件夾
- 從目標文件夾中刪除存根類文件並將其替換爲舊的預編譯類文件
- 打包jar文件。
,你會推薦哪一種方法?
UPDATE
我提供有關依賴項目結構的更多細節:
所有的類都是一樣的包裏面:
my.project.domain.JiBX__c_GeneratedObfuscatedClass1.java
my.project.domain.JiBX__c_GeneratedObfuscatedClass2.java
my.project.domain.JiBX__c_GeneratedObfuscatedClass3.java
my.project.domain.CustomizableClass1.java
my.project.domain.CustomizableClass2.java
my.project.domain.CustomizableClass3.java
JiBX的類不正確導入作爲依賴和如果我嘗試將任何CustmizableClass放入項目源中並讓JiBX的依賴項進行編譯,那麼編譯器會報告缺少的方法。
我也試過用窗簾插件的建議,但因爲我需要包括JiBX的類到我的源路徑,我會最終不得不包含進從JAR依賴包JiBX的類和編譯CustomizableClasses,但跳過從CustomizableClasses jar dep和編譯的JiBX類。
我看起來像它可以工作,但我承認我依然沒有找到這樣做的方式。任何線索都會非常受歡迎。
更新2(分辨率)
我在這裏解釋:我終於這個用窗簾插件的建議,以防萬一別人需要做的是相同的:
我終於創建了一個項目將反編譯的類放在同一個包中,並將不想反編譯的方法留下注釋掉。
在pom.xml我增加了以下內容:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>${project.groupId}:${project.artifactId}</include>
<include>TheDamnedProject:WithoutSources</include>
</includes>
</artifactSet>
<filters>
<filter>
<artifact>TheDamnedProject:WithoutSources</artifact>
<includes>
<!-- These classes will be taken directly from dependency JAR -->
<include>my/package/ClassWhichCouldNotBeDecompiled1.class</include>
<include>my/package/ClassWhichCouldNotBeDecompiled2.class</include>
<include>my/package/ClassWhichCouldNotBeDecompiled3.class</include>
<include>my/package/ClassWhichCouldNotBeDecompiled4.class</include>
</includes>
</filter>
<filter>
<artifact>${project.groupId}:${project.artifactId}</artifact>
<excludes>
<!-- These classes will be overridden by the ones inside the JAR -->
<exclude>my/package/ClassWhichCouldNotBeDecompiled1.class</exclude>
<exclude>my/package/ClassWhichCouldNotBeDecompiled2.class</exclude>
<exclude>my/package/ClassWhichCouldNotBeDecompiled3.class</exclude>
<exclude>my/package/ClassWhichCouldNotBeDecompiled4.class</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
的感謝!
普約爾
您是否需要此動態發生的呢?部署已更改的JAR並僅將其引用爲依賴關係會有什麼不利嗎? – 2013-02-12 10:59:02
我可以用手動方式來做這件事,但這是我第二次需要在短時間內對其進行修改,並且我無法保證下一位開發人員能夠理解正在進行的操作,所以我寧願將其設置爲儘可能自動化。 – 2013-02-12 11:26:04
另請參見http://stackoverflow.com/q/1832853/545127 – Raedwald 2013-02-21 00:53:48