簡體   English   中英

從隨機位置獲取 .classpath

[英]Get .classpath from random location

我試圖將我的.classpath文件作為InputStreamFile 如果我在默認包中有一個類,我可以簡單地使用getResourceAsStream(".classpath")

ArrayList<String> attributes = new ArrayList<String>();
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
// Access classpath from class in default package
Document doc = dBuilder.parse(Main.class.getResourceAsStream(".classpath"));
doc.getDocumentElement().normalize();

NodeList nList = doc.getElementsByTagName("classpathentry");

for (int temp = 0; temp < nList.getLength(); temp++) {

    Node nNode = nList.item(temp);

    System.out.println(nNode.getAttributes().getNamedItem("path").getNodeValue());
}

但是在我不知道它相對於訪問它的類的位置的情況下,我不能使用這個方法。 我嘗試使用環境變量CLASSPATH ,但這給了我一個不存在的文件的路徑( C:\\Program Files (x86)\\QuickTime\\QTSystem\\QTJava.zip )。 我也試過System.getProperty("java.class.path"); ,但這僅給了我當前 jar 的名稱。 我不是要獲取當前 jar 或其路徑,而是要獲取(每個?)IDE 項目和 jar 文件中的.classpath XML 格式文件。 圖像1 圖像2

是否有一種干凈的(靜態)方式來訪問類路徑而無需輸入其位置,可能是通過靜態引用? 我覺得可能有使用ClassLoader ,但我找不到任何這樣的方法。

我試圖訪問在每個 jar 中找到的 xml 文件,而不是文字路徑。

我認為您正在尋找不存在的東西。 (當然,它存在於源項目中。但(通常)不在二進制 JAR 文件中。看看 JAR 文件的內部!!)

JAR 文件規范沒有提到“.classpath”文件。 不可執行的 JAR 文件不需要類路徑,可執行的 JAR 文件通過清單屬性表示類路徑。 (參考JAR 文件規范)。

現在技術上可以將“.classpath”文件從您的 IDE 項目復制到 JAR 文件中(例如,通過自定義 Maven POM 文件,如果您使用 Maven),但我從未聽說過將文件放入的 IDE默認情況下是一個 JAR。

但是……如果您的 JAR 文件中有“.classpath”文件(不知何故),您應該能夠在運行時找到它們。 一種可能性是使用:

該庫的廣告功能之一是在資源樹中搜索與名稱正則表達式匹配的文件。

如何在 Java 中獲取類路徑

public class JavaCoreExample { public static void main(String[] args) { // Call System property to get the classpath value String classpathStr = System.getProperty("java.class.path"); System.out.print(classpathStr); } }

如果您使用sbt run或其他啟動器(如 Maven)運行該程序,您將只會看到sbt-launch.jar或顯示的啟動器 jar。 這是因為這實際上是 SBT 或 Maven 的類路徑,而不是您的客戶端程序。

如果您從 IDE(如 IntelliJ)運行程序,您將看到整個類路徑:

/usr/lib/jvm/java-8-oracle/jre/lib/charsets.jar:/usr/lib/jvm/java-8-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jfxrt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-8-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jce.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfr.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfxswt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jsse.jar:/usr/lib/jvm/java-8-oracle/jre/lib/management-agent.jar:/usr/lib/jvm/java-8-oracle/jre/lib/plugin.jar:/usr/lib/jvm/java-8-oracle/jre/lib/resources.jar:/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar:/mnt/_/work/experiments/scala/stackOverflow/target/scala-2.12/classes:/home/mslinn/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.4.jar:/opt/idea-IU-173.3727.127/lib/idea_rt.jar:/opt/idea-IU-173.3727.127/lib/rt/debugger-agent.jar

如果您通過使用指定的類路徑啟動程序來運行程序,則會發生同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM