相关疑难解决方法(0)

有没有办法从build.xml中指定本地jsch.jar的位置?

build.xml包含<scp><sshexec>任务,所以我在build.xml中提供了jsch.jar和其他库在同一目录中.

以下taskdef:

<taskdef name="scp"
    classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp"
    classpath="WebContent/WEB-INF/lib/jsch-0.1.43.jar" />
Run Code Online (Sandbox Code Playgroud)

抛出错误

A class needed by class org.apache.tools.ant.taskdefs.optional.ssh.Scp
cannot be found: com/jcraft/jsch/UserInfo
Run Code Online (Sandbox Code Playgroud)

我无法修改标准的Ant安装(例如将jsch.jar放在ant lib目录中,或删除ant-jsch.jar),或添加命令行标志,或修改系统环境变量等:脚本必须默认运行Ant在不同的系统上.

我实际上是在重新提出这里最初提出的问题:http: //ant.1045680.n5.nabble.com/specifying-location-of-an-external-library-within-build-xml-td1344969.html

但是无法得到关于classloader工作的答案.

java ant scp

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

任何可以基于远程JNLP文件快速建立本地项目以进行即时调试的Java IDE?

给定一个可以工作的远程JNLP(所有jar都可用等),但是你需要在代码上运行一个调试会话.

是否有任何工具可以轻松地在任何合理的现代IDE中创建本地项目,该IDE包含JNLP中所述资源的本地副本,并且可以在调试模式下运行所述代码?假设反编译器可用,这只是让调试会话运行的问题.

是否有任何IDE(Eclipse,Netbeans,IntelliJ,JDeveloper等等 - 甚至是商业产品)只能在给定JNLP URL的情况下执行此操作?

java ide java-web-start

8
推荐指数
1
解决办法
379
查看次数

通过jdbc与mysql相关的异常

当我尝试通过jdbc连接mysql时,我遇到了异常.这个问题类型已经被问到但是我没有得到解决我问题的方法,这是我的代码......

    public static void main(String[] args) {
    String url="jdbc:mysql://localhost:3306/student?
    autoReconnect=true&useSSL=false";
    String user="root";
    String pass="system";
    try {
        Class.forName("com.mysql.jdbc.Driver");

        System.out.println("Now connecting to databse...\n");
        Connection con=DriverManager.getConnection(url,user,pass);
        System.out.println("Connected !!!\n");
        con.close();
        System.out.println("connection close !!!\n");

    } catch (ClassNotFoundException | SQLException e) {System.out.println(e);
   e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

}

这些是我得到的例外......

run:
Now connecting to databse...

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at …
Run Code Online (Sandbox Code Playgroud)

java mysql jdbc

7
推荐指数
3
解决办法
7102
查看次数

从内存动态加载JAR

我想动态加载JAR,直接加载内存.
说,我有一个包含JAR的缓冲区,我想加载JAR中的所有类,或者至少列出JAR中存在的所有文件.(课程,图像等......).
如果我加载的第一个类依赖于第二个类,我该怎么办?java知道如何处理这个吗?或者我自己照顾这个?

java jar classloader

6
推荐指数
2
解决办法
2783
查看次数

Java ClassLoader - 将动态加载的jar添加到系统类加载器

有没有办法在运行时更新系统类加载器?在我动态加载jar文件之后,有什么办法可以将从这个jar加载的类/包添加到我的系统类加载器中吗?

我试图这样做的原因是,虽然我通过在我自己的代码中传递我新创建的ClassLoader取得了一些成功,但我遇到了第三方库(apache-WSIF)的问题似乎正在使用传递的ClassLoader.

java classloader

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

在运行时加载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万
查看次数

Java - 从Jar文件创建一个类

是否可以从jar文件加载一个类,然后从中创建一个对象?

注意:程序编译时,jar文件不存在,但稍后由用户添加,并在用户启动程序时加载.

我的代码喜欢这样:用户有一个jar文件,其中只有一个编译过的java类.然后,用户将此jar文件放在一个目录中,并启动我的程序,该程序查看目录并找到此jar文件.然后它加载这个jar文件并从中创建一个类,然后由它创建一个对象并将其添加到数组中.

除了从jar文件创建一个类(作为java.io文件加载)然后从该类创建和对象之外,我已经完成了所有工作.

有帮助吗?谢谢.

java oop class

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

在运行时动态加载jar?

我当前的java项目正在使用来自另一个项目(同一个包)的方法和变量.现在,另一个项目的jar必须在类路径中才能正常工作.我的问题是jar的名称可以并且会因为版本的增加而改变,并且因为你不能在manifest类路径中使用通配符,所以不可能将它添加到类路径中.所以目前启动我的应用程序的唯一选择是使用-cp命令行中的参数,手动添加我的项目依赖的另一个jar.

为了改善这一点,我想动态加载jar并阅读有关使用ClassLoader的信息.我为它阅读了很多例子,但是我仍然不明白如何在我的案例中使用它.

我想要的是加载一个jar文件,比方说,myDependency-2.4.1-SNAPSHOT.jar但它应该能够只搜索一个jar文件,myDependency-因为我已经说过版本号可以随时改变.然后我应该能够像我现在一样在我的代码中使用它的方法和变量(比如ClassInMyDependency.exampleMethod()).

任何人都可以帮助我,因为我已经在网上搜索了几个小时,但仍然没有得到如何使用ClassLoader来做我刚才解释的.

提前谢谢了

java classloader

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

如何在 Java 16 中将 JAR 动态加载到运行时?

我之前已经看过这里,了解如何将 jar 动态加载到类路径中。当时提出的这个解决方案完美无缺:

File file = ...
URL url = file.toURI().toURL();

URLClassLoader classLoader = (URLClassLoader)ClassLoader.getSystemClassLoader();
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(classLoader, URL);
Run Code Online (Sandbox Code Playgroud)

然而,这在 Java 9+ 中是不可能的,但有一个涉及Module#addOpens的 hack ,它允许打开 URL 方法。例如,打开模块的代码如下所示:

try {
      final Class<?> moduleClass = Class.forName("java.lang.Module");
      final Method getModuleMethod = Class.class.getMethod("getModule");
      final Method addOpensMethod = moduleClass.getMethod("addOpens", String.class, moduleClass);
      final Object urlClassLoaderModule = getModuleMethod.invoke(URLClassLoader.class);
      final Object thisModule = getModuleMethod.invoke(DependencyUtilities.class);
      addOpensMethod.invoke(
          urlClassLoaderModule, URLClassLoader.class.getPackage().getName(), thisModule);
      Logger.info(
          "User is using Java 9+, meaning Reflection Module does have to …
Run Code Online (Sandbox Code Playgroud)

java dependencies runtime jar classloader

5
推荐指数
0
解决办法
1139
查看次数

Java:将子类类型作为Main()的参数传递

args[]public static void main(String args[]),我想指定要执行哪个子类.如何将args[](a String)的参数转换为类声明?

例如,如果args[0]= "Subclass1",那么我需要声明:
BaseClass b = new Subclass1()

这可能与Java有关吗?

编辑
为了使这一步更加棘手,这些子类来自外部.jar.有没有办法动态导入子类,还是需要事先导入它们?

java program-entry-point class subclass

3
推荐指数
2
解决办法
716
查看次数