此类文件的 Jar 属于容器“Android Dependencies”,该容器不允许修改其条目上的源附件

Posted

技术标签:

【中文标题】此类文件的 Jar 属于容器“Android Dependencies”,该容器不允许修改其条目上的源附件【英文标题】:The Jar of this class file belongs to container 'Android Dependencies' which does not allow modifications to source attachments on its entries 【发布时间】:2012-04-21 23:00:18 【问题描述】:

我正在制作一个电子邮件应用程序,该应用程序在此问题的标题中给出了错误。我该如何解决这个问题?如果有助于找到解决方案,我将提供我的代码截图。

【问题讨论】:

WindRider 的回答是正确且官方的。您应该更改您的接受,以便未来的用户可以找到答案。 请考虑接受的答案,因为当前接受的答案不是解决方案。 【参考方案1】:

似乎是他们在 ADT r17 中故意破坏的东西。见http://code.google.com/p/android/issues/detail?id=27490#c6。

【讨论】:

感谢您的回答。我通过向应用程序添加另一个 jar 解决了这个问题,因为我已经将 eclipse ADT 升级到 r17。但是这个问题的原因是r17。再次感谢 另外请注意,这计划在 ADT r20 中修复(在预览版 2 中,截至我撰写本文时尚未发布)。见code.google.com/p/android/issues/detail?id=27490#c21。 请参阅 WindRider 提供的答案 - 它提供了有关我在之前评论中提到的修复的详细信息。【参考方案2】:

注意评论 8 中的解决方法

http://code.google.com/p/android/issues/detail?id=27490#c8。 “您好,我已经解决了评论 3 中描述的问题:

    将内容从 libs 文件夹移回 lib,因为 ADT 17 会自动添加 Android 依赖项下 libs 目录中的所有 jar。 从您的 lib 目录添加依赖项作为正常的 eclipse 依赖项(ADT 17 之前的旧方法)。将 JAR 文件与其源 JAR 文件或 Javadoc 链接起来。 在项目属性 -> Java 构建路径 -> 排序和导出检查所有添加的依赖项以包含在项目类文件中。 选择 Android 工具 > 修复项目属性"

【讨论】:

【参考方案3】:

对此有官方解决方案:

允许库中的 3rd 方 jar 的 src/doc 附件/

由于这些 jar 是通过类路径容器动态添加的, 开发人员无法通过 Eclipse UI 设置源路径和 javadoc (容器不允许编辑这些)。解决这个问题,并确保 这两条路径不仅被当前项目拾取,而且 也由其他项目(如果当前项目是库项目), 该值由 jar 文件旁边的文件设置。该文件是 jar 文件后的名称,在末尾添加 .properties。例如 foo.jar -> foo.jar.properties 它目前可以包含 2 个属性: src:源文件夹(或存档)的相对或绝对路径。文档: javadoc 的相对或绝对路径。

https://android-review.googlesource.com/#/c/35702/

编辑:Explanation in Google I/O 2012 video

例如,对于 Joda-Time 2.1:

cd $PROJECT/libs
touch joda-time-2.1.jar.properties

并插入以下内容,确保路径正确:

src=/Users/josh.oneal/SDKs/joda-time-2.1/joda-time-2.1-sources.jar
doc=/Users/josh.oneal/SDKs/joda-time-2.1/joda-time-2.1-javadoc.jar

您现在可以在 Eclipse 中右键单击您的项目并刷新,然后 Command / Ctrl + 单击一个类,例如 DateTime 以查看其源代码。

【讨论】:

非常感谢,这绝对是问题的正确答案。我已经编辑了您的帖子,以便为未来的观众提供一个示例。 如果jar是通过workspace中的另一个android项目添加的(设置>android>添加库项目)? 谢谢!注意。我还需要重启 Eclipse 才能生效。 谢谢!看来您实际上需要 src 和 doc。我尝试仅添加 src,但在添加 doc 之前它不起作用。 我不需要做 gunar 描述的(在 Eclipse Juno 中),所以这要么已经修复,要么 guno 的问题是由其他原因引起的。【参考方案4】:

在使用 javax.mail 访问 gmail 时遇到了同样的问题。根据此链接(http://***.com/questions/6546926/could-not-find-class-error-when-trying-to-upload-a-video-to-youtube-using-the-gd),它和 Android 似乎存在某种问题。

我通过使用这个 JAR 文件解决了这个问题,这里:http://code.google.com/p/javamail-android/

【讨论】:

【参考方案5】:

当您使用 eclipse 时,您可以通过选择您的库项目并转到 Properties > Order and Export 并将您的 src 依赖项移动到 gen 依赖项之上来修复它。你也可以手动编辑你的 .classpath 文件来做同样的事情。清理此项目后,源附件应该可以工作。找出解决方案的积分转到NightCrawler

【讨论】:

这对我有用!我所做的是:右键单击作为我主要项目的库的项目。选择properties -> java build path -> order and export -> 将[projectname]/src 行一直移到顶部!! 这对我也有用。基本上,我将 [projectname]/src 移到 [projectname]/.apt_generated; 上面。后者被选为应用程序项目中的源 我几乎尝试了所有其他公认的答案,但没有结果。一旦我意识到它需要在图书馆中完成,这对我有用。我一直对宿主项目这样做,但什么也没做。【参考方案6】:

我终于找到了真正最简单的解决方案。

这是使用 IDE,并且始终可以正常工作。最简单的解决方案。

如果您有一个复杂的结构,其中一个库项目使用一个库,并且该库项目用于您的项目,依此类推。或者在任何情况下......这样做来解决这个问题:

导入eclipse你想要的库,可以看到调试过程的源代码。

通过右键单击项目 > 属性 > Android 标记 Is Library 选项

然后转到所有使用该库的库项目, 并右键单击项目 > 属性 > Android > 添加 > 并选择您的库。

然后,转到您的项目和在 Project>Properties>Android>Library_name 中的库项目,单击删除并再次添加它,以便能够假设库项目中的更改。

仅此而已。它只是使用库本身的项目,而不是仅使用您要查看源代码的库的jar。

【讨论】:

【参考方案7】:

也试试这个解决方案:转到项目文件夹并打开 .classpath 文件。 这里重排classpathentry这样的方式

<?xml version="1.0" encoding="UTF-8"?>
    <classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>

第一个是&lt;classpathentry kind="src" path="src"/&gt;,第二个是&lt;classpathentry kind="src" path="gen"/&gt;。就我而言,它解决了所有问题。

【讨论】:

以上是关于此类文件的 Jar 属于容器“Android Dependencies”,该容器不允许修改其条目上的源附件的主要内容,如果未能解决你的问题,请参考以下文章

jar方式运行项目-读取jar包中的文件

ImportError:libgthread-2.0.so.0:无法打开共享对象文件:使用 Docker 容器导入 cv2 时没有此类文件或目录

如何在 docker 容器中定义环境变量以与我的 jar 文件一起使用 [重复]

docker可复用容器

通过命令验证docker容器相当一个轻量级的Linux运行环境,且每个容器内都有一个属于自己的文件系统,容器之间相互隔离

Liferay 7 OSGi的一些小技巧