相关疑难解决方法(0)

我应该如何在运行时动态加载Jars?

为什么在Java中这么做呢?如果您想拥有任何类型的模块系统,您需要能够动态加载jar.我被告知有一种方法可以通过编写自己的方式来完成它ClassLoader,但这对于应该(至少在我看来)像调用一个以jar文件作为参数的方法一样容易的事情来做很多工作.

这样做的简单代码的任何建议?

java jar classloader

290
推荐指数
13
解决办法
27万
查看次数

Hibernate - ClassNotFoundException:com.mysql.jdbc.Driver

我正在尝试通过Hibernate从MySQL数据库中检索数据,但我遇到了这个错误:

Failed to create sessionFactory object.org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver com.mysql.jdbc.Driver could not be loaded

java.lang.ClassNotFoundException: Could not load requested class : com.mysql.jdbc.Driver
[...]
Run Code Online (Sandbox Code Playgroud)

我使用一个名为DAOFactory的类来获取hibernate会话:

public class DAOFactory {

    private static boolean isInstance = false;  
    private static SessionFactory sessionFactory;
    private static ServiceRegistry serviceRegistry; 
    private static Session session;

    private DAOFactory() throws ExceptionInInitializerError{        
        if( !isInstance ) {
            try {               
                Configuration cfg   = new Configuration().configure();              
                serviceRegistry     = new ServiceRegistryBuilder().applySettings(cfg.getProperties())
                                                .buildServiceRegistry();
                sessionFactory      = cfg.buildSessionFactory(serviceRegistry);
            } catch (Throwable ex) {
                System.err.println("Failed to create sessionFactory object."+ ex); …
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate jdbc

18
推荐指数
3
解决办法
6万
查看次数

Java动态加载类

我试图动态地将类加载到组件中.我正在使用文件选择器来选择将要加载的.JAR文件,然后使用选项窗格来获取类的名称.

我已经在互联网上搜索如何将java文件转换为URL以便在URLClassLoader中加载它我已经提出:

File myFile = filechooser.getSelectedFile();
String className = JOptionPane.showInputDialog(
    this, "Class Name:", "Class Name", JOptionPane.QUESTION_MESSAGE);

URL myUrl= null;
try {
    myUrl = myFile.toURL();
} catch (MalformedURLException e) {
}

URLClassLoader loader = new URLClassLoader(myUrl);
loader.loadClass(className);
Run Code Online (Sandbox Code Playgroud)

我现在收到一个'无法找到符号'错误,将URL加载到URLClassLoader中

java swing dynamic classloader

10
推荐指数
3
解决办法
3399
查看次数

Java类加载器如何为"常规"环境工作(非明确使用类加载器)

我正在研究类路径的动态修改.我找到了一个可以正常工作的解决方案,但它使用显式调用addURL()来实现.(大概是在启动时)

但是,如果默认的类加载器似乎无法找到它,我想在运行时拦截类加载过程以找到类.我试图将ClassLoader类化,因此它只是委托findClass()loadClass()默认,并打印出一个调试行告诉我这些方法已被调用,但是当我的类通过隐式类加载使用依赖类时,它们似乎永远不会被调用,例如

// regular object instantiation with 'new'
BrowserLauncher launcher;
launcher = new BrowserLauncher();

// static methods
Foobar.doSomethingOrOther();

// Class.forName()
Class cl = Class.forName("foo.bar.baz");

// reflection on a Class object obtained statically
Class<Foobar> cl = Foobar.class;
// do something with cl, like call static methods or newInstance()
Run Code Online (Sandbox Code Playgroud)

在这些情况下,类加载如何工作?(相对于显式调用Classloader.loadClass()的简单情况)

这是我在下面的自定义类加载器的尝试.如果我使用带有参数列表的DynClassLoader0.main(){"some.package.SomeClass", "foo", "bar", "baz"},并且some.package.SomeClass引用外部.jar文件中的其他类,使用上面列出的方法之一,为什么我的DynClassLoader0的findClass()和loadClass不是( )被叫?loadClass被调用的唯一时间是在下面的main()函数中对loadClass的显式调用.

package com.example.test.classloader;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class DynClassLoader0 extends ClassLoader { …
Run Code Online (Sandbox Code Playgroud)

java classloader

5
推荐指数
1
解决办法
3132
查看次数

在运行时加载jar

我试图在运行时将jar文件添加到classpath.我用这个代码

 public static void addURL(URL u) throws IOException {

            URLClassLoader sysloader = (URLClassLoader) ClassLoader
                    .getSystemClassLoader();
            Class<URLClassLoader> sysclass = URLClassLoader.class;

            try {
                Method method = sysclass.getDeclaredMethod("addURL", parameters);
                method.setAccessible(true);
                method.invoke(sysloader, new Object[] { u });
                System.out.println(u);
            } catch (Throwable t) {
                t.printStackTrace();
                throw new IOException("Error");
            }

        }
Run Code Online (Sandbox Code Playgroud)

系统输出打印此网址:

file:/B:/Java/Tools/mysql-connector-java-5.1.18/mysql-connector-java-5.1.18/mysql-connector-java-5.1.18-bin.jar
Run Code Online (Sandbox Code Playgroud)

我仔细检查了这条路,这个罐子存在.即使这个测试显示com.mysql.jdbc.驱动程序类存在.

javap -classpath "B:\Java\Tools\mysql-connector-java-5.1.18\
mysql-connector-java-5.1.18\mysql-connector-java-5.1.18-bin.jar" com.mysql.jdbc.
Driver
Compiled from "Driver.java"
public class com.mysql.jdbc.Driver extends com.mysql.jdbc.NonRegisteringDriver i
mplements java.sql.Driver{
    public com.mysql.jdbc.Driver()       throws java.sql.SQLException;
    static {};
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用这个Class.forName(驱动程序)时,我仍然得到java.lang.ClassNotFoundException.这段代码有什么问题?

java runtime jar

5
推荐指数
1
解决办法
2万
查看次数

从jar动态加载类

我知道我们可以使用自定义类加载器动态加载类.但在这里我的问题是我的课程本身取决于其他课程

我的任务是获取PigServer对象.所以我使用以下代码加载PigServer类

_pigServerClass = _classLoader.loadClass("org.apache.pig.PigServer");
Run Code Online (Sandbox Code Playgroud)

但是这里PigServer类本身依赖于很多其他类.

因此,当我试图获取PigServer类的实例时,它显示以下错误

java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
java.lang.ClassNotFoundException:org.apache.log4j.AppenderSkeleton
 etc..
Run Code Online (Sandbox Code Playgroud)

有谁能说出如何解决这个问题?

java classloader apache-pig

5
推荐指数
1
解决办法
1404
查看次数

从Scala宏更改编译器的类路径?

假设我们想要require在Scala中构建一个类似于许多脚本语言的功能.

如果我们需要像这样的图书馆......

require("some-library.jar")
Run Code Online (Sandbox Code Playgroud)

...当执行require宏时,我们需要一种方法将此jar添加到编译器的类路径中.如何才能做到这一点?

macros scala classpath scala-2.10

5
推荐指数
1
解决办法
310
查看次数

将类路径添加到netbeans maven项目

我有一个java项目,它使用.properties文件进行配置.在服务器上,启动时,我将类路径设置为包含一个包含所有属性文件的文件夹.在我的本地计算机上,我想指向另一个文件夹.

我希望添加到类路径,理想情况下,所有项目,但添加到每个项目也没关系.我已经尝试更改Run > VM Options为包含类路径,但是通过该更改它找不到主类,我得到了java.lang.NoClassDefFoundError.我也尝试直接更改nbactions.xml以将类路径设置为-classpath ~\MyFolder\;%classpath,但这有同样的问题.

为了增加难度,服务器在我的本地机器运行Windows时运行linux.

java netbeans maven

4
推荐指数
3
解决办法
8740
查看次数

如何从matlab运行clojure

如何从matlab运行clojure脚本?

我试过以下:用jdk 1.7运行matlab然后调用java

MATLAB_JAVA=/usr/lib/jvm/java-7-oracle/jre matlab
Run Code Online (Sandbox Code Playgroud)

在matlab中,设置classpath并使用clojure编译器

javaaddpath([pwd '/lib/clojure-1.5.1.jar'])
import clojure.lang.RT
Run Code Online (Sandbox Code Playgroud)

我在这里得到错误:

Error using import
Import argument 'clojure.lang.RT' cannot be found or cannot be imported. 
Run Code Online (Sandbox Code Playgroud)

当我编写运行clojure的java类时,一切都在从控制台运行,但是不能从matlab运行.请指教.

matlab clojure classpath

3
推荐指数
1
解决办法
672
查看次数