上下文中的Java类路径

上下文中的Java类路径,java,classpath,Java,Classpath,我正在编写一个程序,它需要知道其上下文中的所有类/jar。例如,如果它在Maven环境中运行,它必须知道.m2/中所有依赖JAR的路径。如果它在Tomcat中运行,它必须知道WEB-INF/lib/中的JAR。它应该自动执行此操作,无需任何配置。我使用过System.getProperty(“java.class.path”),但它在Tomcat中不起作用。我想以前也有人问过类似的问题。 您需要从SystemClassLoader加载JAR ((URLClassLoader) (Thread.c

我正在编写一个程序,它需要知道其上下文中的所有类/jar。例如,如果它在Maven环境中运行,它必须知道.m2/中所有依赖JAR的路径。如果它在Tomcat中运行,它必须知道
WEB-INF/lib/
中的JAR。它应该自动执行此操作,无需任何配置。我使用过
System.getProperty(“java.class.path”)
,但它在Tomcat中不起作用。

我想以前也有人问过类似的问题。 您需要从SystemClassLoader加载JAR

((URLClassLoader) (Thread.currentThread().getContextClassLoader())).getURLs()
有关更多详细信息,请参阅此链接


我想以前也有人问过类似的问题。 您需要从SystemClassLoader加载JAR

((URLClassLoader) (Thread.currentThread().getContextClassLoader())).getURLs()
有关更多详细信息,请参阅此链接


如果在Tomcat中运行,Tomcat将自动设置类路径。类似地,如果运行Maven,Maven也会这样做。为什么你的应用程序必须自己做呢?它必须在运行时调用java编译器来编译java代码,而java代码也是在运行时生成的。因此java编译器需要知道编译java代码所需的JAR(在上下文中)。如果它在Tomcat中运行,Tomcat将自动设置类路径。类似地,如果运行Maven,Maven也会这样做。为什么你的应用程序必须自己做呢?它必须在运行时调用java编译器来编译java代码,而java代码也是在运行时生成的。因此java编译器需要知道编译java代码所需的JAR(在上下文中)。我找到了解决方案:必须检查三个上下文:系统的类加载器、
getContextClassLoader
和最后一个:
this.getClass().getClassLoader()
。我已经找到了解决方案:必须检查三个上下文:系统的类加载器、
getContextClassLoader
和最后一个:
this.getClass().getClassLoader()
。那么它应该会起作用。