2012-10-22 28 views
11

我內的IntelliJ以下目錄結構,其中包含一個Android庫項目:如何防止來自的IntelliJ複製的資源投入到項目的編譯器輸出目錄?

java/com/example/base/AndroidManifest.xml 
java/com/example/base/assets # contains Android assets 
java/com/example/base/res # contains Android resources 
java/com/example/base/Base.java 
java/com/example/base/base.iml 

base.iml包含以下內容:

<content url="file://$MODULE_DIR$"> 
    <sourceFolder url="file://$MODULE_DIR$" 
       isTestSource="false" 
       packagePrefix="com.example.base" /> 
    <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" /> 
    <excludeFolder url="file://$MODULE_DIR$/res" /> 
</content> 

當我建立這取決於我的圖書館一個Android應用程序項目項目中,我得到一個錯誤:

[myapp] java.util.zip.ZipException: duplicate entry: res/drawable/image_shadow.9.png 

項目海虹之彩cture對話框,我配置了項目編譯器輸出是我項目根目錄下的out目錄。當我嘗試建立我的Android項目,我發現我的Android資源的副本out/production/base/com/example/base/res/文件夾下結束。

我的假設是我的Android資源被當作「正常」的Java資源(類型,你將加載使用Class.getResource()),這就是爲什麼他們被複制到out/production,這反過來又導致duplicate entry例外,我看到。

任何想法,如果是這樣的話?如果是這樣,我怎麼能防止被複制這些文件?在Eclipse中,在.classpath文件<classpathentry>元素具有excluding屬性,需要一個glob模式,以防止這種行爲。

+0

我應該補充一點,我試着在黑暗中拍攝''的東西。任何需要它的解決方案都是不合需要的,因爲它會在IntelliJ的用戶界面中隱藏源碼樹中的res文件夾。我想排除該文件夾被視爲編譯,而不是可見。 – bolinfest

+0

這個問題可能在你的Android方面設置,可能錯誤的目錄配置爲'res'。如果沒有'.iml'文件,不能說更多。 – CrazyCoder

+0

我相信我的小面具有的標準樣板: <組件名稱= 「FacetManager」> <面型= 「機器人」 名稱= 「機器人」> <結構> <選項名= 「RES_FOLDER_RELATIVE_PATH」 值=」/RES」 /> SO似乎並沒有讓我貼了整個事情。 我很好奇這個與packagePrefix和Android庫項目的交互是否已經過測試? – bolinfest

回答

0

你應該有一個項目結構,如:

  • 項目/ src目錄/主/ RES
  • 項目/ src目錄/主/資產
  • 項目/ src目錄/主/ JAVA
  • 項目/的src/main/AndroidManifest.xml中

無論如何,對於res文件夾,你應該有一個這樣的條目:

<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> 
+0

沒有爲我工作:(還有什麼建議? – bentzy

1

我遇到了類似的問題,因爲main目錄被標記爲「來源」。

所以在項目結構,爲Android方面,「結構」選項卡下我有:

... Resources directory: .../src/main/res ...

而且該模塊的正常的「源」選項卡下,srcmain DIR過被標記爲「源」。

我固定它通過使源標籤的樣子:

- src (unmarked) - main (unmarked) - java (Sources) - res (Resources)

所以我猜這個錯誤是因爲資源東西被打包成的zip既作爲源和資源,因此重複。

相關問題