请在2024 Clojure状态调查!分享您的想法。

欢迎!请查阅关于页面,以获取更多关于如何使用本网站的详细信息。

0
java.classpath

我有一个项目,将数据存储在其资源中,它期望在classpath中找到这些资源。当项目使用java.classpath 0.2.2和clojure-maven-plugin 1.3.20+时,调用(java.classpath/classpath)会产生意外的结果——它显示了一些sun的组件,但没有依赖项,没有clojure,也没有我的代码或资源。虽然clojure似乎正在运行,但调用classpath api时存在问题。

为了比较

java.classpath 0.1.0和c-m-plugin 1.3.9运行正常。

java.classpath 0.1.0和c-m-plugin 1.3.20可能会出现问题时,有时只在classpath上显示一个看起来是空清单文件的单个项目。

此处交叉发布到clojure-maven-plugin
https://github.com/talios/clojure-maven-plugin/issues/81

8 个回答

0

评论由:drlivingston做出

与这个Java版本一样
Java版本:1.7.0_45,供应商:Oracle Corporation

0

评论由:stuart.sierra做出

我可以确认clojure-maven-plugin 1.3.13之后的所有版本的clojure-maven-plugin上的所有java.classpath版本都存在这种行为。

从clojure-maven-plugin的1.3.13版本开始,插件不再通过命令行使用-cp指定Java类路径,而是生成一个临时JAR文件,其中包含真正的类路径的清单文件,并以-jar启动Java。

请参阅Clojure Maven插件(链接:[https://github.com/talios/clojure-maven-plugin/pull/58](https://github.com/talios/clojure-maven-plugin/pull/58) 文本:拉取请求 #58)包含(链接:[https://github.com/talios/clojure-maven-plugin/commit/8d8e90e41806a6927c11347e6fc13344ba53c887](https://github.com/talios/clojure-maven-plugin/commit/8d8e90e41806a6927c11347e6fc13344ba53c887) 文本:提交 8d8e90e4)。

{{clojure.java.classpath/classpath}} 查看加载Clojure的类加载器,在本例中是 {{sun.misc.Launcher$AppClassLoader}} 的子类加载器。AppClassLoader 是 {{URLClassLoader}} 的子类(链接:[http://docs.oracle.com/javase/6/docs/api/java/net/URLClassLoader.html](http://docs.oracle.com/javase/6/docs/api/java/net/URLClassLoader.html) 文本:URLClassLoader),但它的 {{getURLs}} 方法只返回 JAR 文件的 URL。没有明显的 API 可以在不打开和读取 JAR 文件内容的情况下获取清单文件的 {{Class-Path}} 属性。

0
by

评论由:stuart.sierra做出

在进一步挖掘OpenJDK源代码时,URLClassLoader 懒惰地读取 JAR 清单文件,按需加载类或资源。要找到 URLClassLoader 可能打开的 {{all}} URLs 列表,您必须重新实现此逻辑以读取所有清单文件。它也必须是递归的(JAR 清单引用另一个含清单的 JAR 文件)并能检测循环。

0
by

评论由:drlivingston做出

感谢您的关注。
我理解这是 clojure-maven-plungin 和 clojure.java.classpath 一起应执行的正确/期望的行为吗?

所以我一直在查看 JAR 文件(尽管我已经意识到我认为我并没有查看嵌套的 JAR 文件 - 类加载器会查看嵌套文件吗?),现在你说我还要覆盖第三个情况,对吧?清单文件?clojure.java.classpath 中有用于读取它们的实用方法吗?

我正在使用像这样的代码来识别类路径上可访问的所有内容

https://github.com/drlivingston/kr/blob/master/kr-core/src/main/clojure/edu/ucdenver/ccp/utils.clj#L101

谢谢,
Kevin

0
by

评论由:stuart.sierra做出

目前,clojure.java.classpath 既不处理 JAR 清单文件,也不处理嵌套的 JAR 文件。如我在前面的评论中所描述的,实现对这些文件的支持将是困难的,并且在我近期内不太可能成为我的优先事项。我愿意审查添加此功能的补丁,但它必须证明它能够保护免受循环复活的影响。

{quote}

{quote}

0

评论由:drlivingston做出


0

评论由:stuart.sierra做出

{quote}

{quote}

0
...