如何防止IntelliJ将资源复制到项目编译器输出目录中?

bol*_*est 11 android intellij-idea

我在IntelliJ中有以下目录结构,其中包含一个Android库项目:

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
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

当我构建一个依赖于我的库项目的Android应用程序项目时,我收到一个错误:

[myapp] java.util.zip.ZipException: duplicate entry: res/drawable/image_shadow.9.png
Run Code Online (Sandbox Code Playgroud)

项目结构对话框中,我配置项目编译器的输出是一个out我的项目的根目录下.当我尝试构建我的Android项目时,我注意到我的Android资源的副本最终在该out/production/base/com/example/base/res/文件夹下.

我的假设是我的Android资源被视为"普通"Java资源(您将加载使用的类型Class.getResource()),这就是他们被复制到的out/production原因,这反过来导致duplicate entry我看到的异常.

不知道是不是这样的话?如果是这样,我该如何防止这些文件被复制?在Eclipse中,文件中的<classpathentry>元素.classpath具有一个excluding属性,该属性采用glob模式来防止这种行为.

Ale*_*ola 0

您应该有一个如下的项目结构:

  • 项目/src/main/res
  • 项目/src/主要/资产
  • 项目/src/main/java
  • 项目/src/main/AndroidManifest.xml

无论如何,对于 res 文件夹,您应该有一个如下所示的条目:

    <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
Run Code Online (Sandbox Code Playgroud)