Tag: classpath

Parent Last Classloader解决Java类路径地狱?

我有一个项目使用两个版本的bouncyCastle jars bcprov-jdk15和bcprov-jdk16。 jvm加载旧版本,但我写的一个function需要运行更新的版本。 我试图通过使用自定义类加载器来解决这个类路径地狱。 经过一些谷歌搜索并借助之前的Stackoverflow回答[1] [2]和本博客 ,我编写了以下Parent Last Class加载器,以便在委托给父类加载器之前从较新的jar加载类。 public class ParentLastClassLoader extends ClassLoader { private String jarFile; //Path to the jar file private Hashtable classes = new Hashtable(); //used to cache already defined classes public ParentLastClassLoader(ClassLoader parent, String path) { super(parent); this.jarFile = path; } @Override public Class findClass(String name) throws ClassNotFoundException { […]

如何访问源文件夹中的Jar文件?

在我的Java项目中,我使用的是H2内存数据库,我必须在初始化应用程序时加载JDBC驱动程序。 我想/需要动态加载H2 .jar文件,所以我执行以下操作: String classname = “org.h2.Driver”; URL u = new URL(“jar:file:libs/h2.jar!/”); URLClassLoader ucl = new URLClassLoader(new URL[] { u }); Driver d = (Driver) Class.forName(classname, true, ucl).newInstance(); DriverManager.registerDriver(new DriverShim(d)); 当我将H2 .jar文件放入我的Java源代码文件夹之外的“libs”文件夹中时(也就是说,在Eclipse中,这个“libs”目录与“src”文件夹处于同一级别),那么这种方法工作正常。 但是,不幸的是,我必须将这个H2 .jar文件放入源代码文件夹树中的文件夹中,但是在主类文件夹下面。 例如,我的Java包结构在Eclipse中如下所示: /src/my/app/MyApp.java // main class of my application /src/my/app/sub/package/h2.jar // how to access this? /libs/h2.jar // loading from here works 我知道这是愚蠢的,但不幸的是我必须使用这个奇怪的设置。 […]

Java运行时ClassNotFoundException

刚刚有一个关于我遇到的奇怪的运行时错误的问题。 我正在使用一个JSON服务器,当外部源提示时,它会响应JSON对象。 但是,截至目前,我只是在发送之前尝试启动并运行JSON对象。 我的代码编译时没有指定任何类路径,但是当涉及到运行时,它会抛出NoClassDefFoundError如下所示: Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at ExampleServer.sendData(ExampleServer.java:76) at ExampleServer.runServer(ExampleServer.java:30) at ExampleServer.main(ExampleServer.java:15) Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) […]

如何将本地文件名传递给ClassPathXmlApplicationContext?

“本地文件名”是指资源文件与类文件位于同一目录中。 在下面的例子中,这是JUnitRunner.class文件。 如果路径不以/ ‘开头,那么Java的getResource()文件可以处理这个问题 我无法弄清楚,如何做同样的ClassPathXmlApplicationContext构造函数? package springtests; import java.io.File; import java.net.URISyntaxException; import java.net.URL; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class JUnitRunner { private final static Logger log = LoggerFactory.getLogger(JUnitRunner.class); @Test public void test() throws URISyntaxException { String filename = “test01.xml”; URL url = getClass().getResource(filename); File file = new File(url.toURI()); log.info(“File exists: {}”, […]

Mac上的CLASSPATH,以及Mac如何寻找mysql-connector-java-bin.jar

Mac OS X 10.6上是否有默认的类路径? 当我echo $CLASSPATH ,什么都不会出现。 在我的.profile ,我只看到PATH变量被设置。 我的问题是我的servlet似乎无法找到一个合适的驱动程序来连接到mysql服务器。 我使用Eclipse , Glassfish v3和MAMP用于MYSQL服务器。

在代码上获取ClassNotFoundException:“Class.forName(”com.microsoft.sqlserver.jdbc.SqlServerDriver“);”

这是我的第一个Java应用程序,我对Java和NetBeans完全缺乏经验。 我一直在尝试连接到sql并获取一些记录2天。 问题是关于jdbc驱动程序,让我解释一下。 我已经下载了sqljdbc驱动程序,然后按照以下步骤操作: 右键单击Project-> Select Properties->在左侧单击Libraries-> Compile选项卡 – 单击Add Jar / Folder按钮并选择sqljdbc4.jar文件。 那应该没问题吧? 然后我写了这段代码但我不能摆脱这个例外: Exception in thread “main” java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SqlServerDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:190) at javaapplication1.JavaApplication1.main(JavaApplication1.java:30) 这是代码 public static void main(String[] args) throws ClassNotFoundException, SQLException { String url […]

如何覆盖存放在ant lib目录中的ant任务

在我的工作中,我们在一些Java项目中使用AspectJ。 为了使这与ant构建一起使用,我们一直将aspectjtools.jar放在ant / lib /中。 我现在正在研究一个特定的Java项目,需要使用更新版本的aspectJ。 我不想让所有使用该项目的人更新其aspectjtools.jar的本地副本。 相反,我尝试将较新的aspectjtools.jar添加到项目的lib目录中,并将以下行添加到build.xml。 但是,这并不像我希望的那样,因为ANT类加载器从ant / lib /优先加载到我在taskdef类路径中指定的jar的jar。 有没有办法强迫ant选择检查我项目的jar?

是否可以动态加载包中包含的所有属性文件? 即MyClass.class.getResource(’*。properties’);

我熟悉在给定文件名的情况下获取属性文件的内容,显然MyClass.class.getResource(’*。properties’)不起作用,但是如何获取位于的所有属性文件的列表与我class级相同的包裹?

jar文件外的application.properties如何

如spring-boot-reference中所述 : 在应用程序类路径上(例如在jar中),您可以拥有一个application.properties,它为name提供合理的默认属性值。 在新环境中运行时,可以在jar外部提供覆盖名称的application.properties 我将重复的application.properties与覆盖的名称放在与jar文件相同的路径上,但是在运行应用程序时: java -jar target/myproject-0.0.1-SNAPSHOT.jar 名称值未被覆盖,它仍然指的是jar文件中的application.properties内部的一个。 我也尝试过: java -Dspring.config.location=/target/application.properties -jar target/myproject-0.0.1-SNAPSHOT.jar 但它不起作用,请帮忙。 编辑 当我将当前目录更改为target并运行它时,它可以正常工作。 java -jar myproject-0.0.1-SNAPSHOT.jar 为什么? 为什么不能在路径之外运行呢?

在命令行运行java程序,我做错了什么?

注意我正在运行Windows,路径看起来像是linus,因为我手动输入它,这就是我对路径的看法。 我正在尝试运行一个java类我已经构建来诊断我与数据库的连接,它引用了oracle jdbc适配器。 当我在没有类路径的情况下运行它时: %> java DBDiagnostics 当它到达以下代码行时我得到一个exception: Class.forName(“oracle.jdbc.pool.OracleDataSource”).newInstance(); 除以下exception: java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleDataSource at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at DBDiagnostics.GetConnection(DBDiagnostics.java:43) at DBDiagnostics.runDiagnostic(DBDiagnostics.java:29) at DBDiagnostics.main(DBDiagnostics.java:18) Creating connection. java.sql.SQLException: No suitable driver found for lskd at java.sql.DriverManager.getConnection(DriverManager.java:602) at java.sql.DriverManager.getConnection(DriverManager.java:207) at DBDiagnostics.GetConnection(DBDiagnostics.java:55) at DBDiagnostics.runDiagnostic(DBDiagnostics.java:29) […]