在命令行上的类路径中包含jar(javac或apt)


137

尝试运行此程序。我认为要设置所有Web服务内容,我需要运行apt。(尽管使用javac,但我遇到了同样的问题)。我认为我得到的是编译错误。(显示在底部)。

我认为我需要做的是在我的类路径中包括这个jar:jsr181-api.jar (源)。有一种简单的临时方法(在solaris上)吗?我不想将其添加到我的bash_rc文件中(它永远存在)。我也知道可以使用清单文本文件来执行此操作,但是这似乎很复杂,因此我尚未对其进行研究。我可以做类似的事情吗?

javac HelloImp <listOfJars>

要么

ant HelloImp <listOfJars>

码:

package server;

import javax.jws.WebService;

@WebService
public class HelloImpl {

  /**
   * @param name
   * @return Say hello to the person.
   */
   public String sayHello(String name) {
     return "Hello, " + name + "!";
   }
}

编译错误:

HelloImpl.java:3: package javax.jws does not exist
import javax.jws.WebService;
                 ^
HelloImpl.java:5: cannot find symbol
symbol: class WebService
@WebService
 ^
2 errors

更新:不错,但还不能完全解决。我创建了一个新问题来使事情保持井井有条:


附带说明一下,仅在编译(即javac)时需要一些jar,而在运行时(即java)则不需要。例如,lombok罐子。
trueadjustr

Answers:


170

尝试以下方法:

java -cp jar1:jar2:jar3:dir1:. HelloWorld

默认的类路径(除非有CLASSPATH环境变量)是当前目录,因此,如果您重新定义它,请确保将当前目录(。)添加到类路径中。



@ CoolAJ86链接似乎已失效
Janis Peisenieks

30
我发现最好的方法是使用java -cp *:. HelloWorld。这样,我的类路径中的所有jar都将始终包含在内。
NN

31

在Windows中:

java -cp C:/.../jardir1/*;C:/.../jardir2/* class_with_main_method

确保具有main函数的类位于所包含的jar之一中


20

对于Windows用户,请注意,罐子应以;而不是分隔:

例如: javac -cp external_libs\lib1.jar;other\lib2.jar;


14

使用-cp-classpath开关。

$ java -help  
Usage: java [-options] class [args...]  
           (to execute a class)  
   or  java [-options] -jar jarfile [args...]  
           (to execute a jar file)  

where options include:  
...  
    -cp <class search path of directories and zip/jar files>  
    -classpath <class search path of directories and zip/jar files>  
                  A ; separated list of directories, JAR archives,  
                  and ZIP archives to search for class files.  

(请注意,用于分隔类路径上条目的分隔符在不同的操作系统之间有所不同,在我的Windows机器上是;,在* nix中通常是:。)


3

使用:

apt HelloImpl.java -classpath /sac/tools/thirdparty/jaxws-ri/jaxws-ri-2.1.4/lib/jsr181-api.jar:.

可行,但它给了我另一个错误,请参阅新问题


2

javac HelloWorld.java -classpath ./javax.jar,假设javax在当前文件夹中,并且编译目标为“ HelloWorld.java”,则可以不使用main方法进行编译

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.