在Java项目中使用jar? [英] Using a jar in a Java project?

查看:140
本文介绍了在Java项目中使用jar?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用包含在名为hello的包中的jar文件(例如,名为Hello.jar)提供的项目中的公共方法/类。

I'm trying to use the public methods/classed from a project provided as a jar file (called Hello.jar for instance) wrapped in a package called hello.

package hello;

public class Hello
{

 public static void main(String[] args)
 {
    coucou();
 }

 public static void coucou()
 {
   System.out.println("Hello there");
 }

}

在一个名为Tool的单独项目中,我希望能够调用方法 Hello.coucou()所以我写了这样的东西:

In a separate project called Tool, I want to be able to call the method Hello.coucou() so I wrote something like this:

import hello.*;

public class Tool
{

 public static void main(String[] args)
 {
   System.out.println("main program running");
   Hello.coucou();

 }

}

我编译具有以下命令的Tool.java(在linux下):

and I compiled Tool.java with the following command (under linux):

$ javac Tool.java -classpath .:./extern/:

其中Hello.jar位于 ./ extern

where Hello.jar is located in the folder ./extern

这似乎编译得很好但是当我启动它(即java工具)时,我得到了这个:

This seems to compile fine but when I launch it (i.e. java Tool), I get this:

main program running
Exception in thread "main" java.lang.NoClassDefFoundError: hello/Hello
    at Tool.main(Tool.java:9)
Caused by: java.lang.ClassNotFoundException: hello.Hello
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
    ... 1 more

我是Java新手(C / C ++背景),我不明白我做错了什么。
任何想法?

I am new to Java (C/C++ background) and I don't understand what I'm doing wrong. Any ideas?

干杯
David

Cheers David

编辑:我尝试将Hello.jar添加到命令行的类路径中,但我仍然遇到同样的错误:

I tried adding Hello.jar to the classpath on the command line, but I still get the same error:

$ javac Tool.java -classpath .:./extern/Hello.jar:
$ java Tool -classpath .:./extern/Hello.jar:
main program running
Exception in thread "main" java.lang.NoClassDefFoundError: hello/Hello
    at Tool.main(Tool.java:9)
Caused by: java.lang.ClassNotFoundException: hello.Hello
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
    ... 1 more


推荐答案

实际上诀窍是命令行中的参数顺序:

Actually the trick was in the order of the arguments in the command line:

-cp(或-classpath)是否设置在最后,然后它没有工作

Is the -cp (or -classpath) is set last, then it doesn't work

java Tool -cp .:extern/Hello.jar

首先必须是:

java -cp .:extern/Hello.jar Tool

!!!

这篇关于在Java项目中使用jar?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆