2012-02-07 42 views
1

我的问题是:从java程序在JAR中执行java类

我有一个test.java类,它是主类。 JAR文件中还有一个类(非主类)。现在我想从JAR之外的主类中编译并执行JAR中的演示类。请解释如何。

public class test 
{ 
public static void main(String args[]) 
{ 
    demo d1 = new demo(); 
    demo d2 = new demo("message passed from main class"); 
} 
} 

public class demo 
{ 
demo()} 
System.out.println("message in demo class"); 
} 
demo(String str) 
{ 
System.out.println(str); 
}} 
+2

*设计“请解释。” *请解释为什么*** *** – 2012-02-07 05:01:09

+0

只是一个字,你的类应该总是开始?与人均信,所以公共类测试,公共类演示 – david99world 2012-02-07 08:43:21

回答

0

我想正确的答案我们 '用蚁族',而是:

javac test.java 
javac demo.java 
jar cf test.jar test.class demo.class 
jar ufe test.jar test 

然后,

java -jar test.jar 

如果你打算扩展这一点,并继续不使用ant,你可能希望你的编译系统停止一个错误,并且会我注意到'javac'在错误时不会返回非零值。将其stderr管理到一个临时文件,然后根据grep的非零返回该文件退出。例如,从不能使用ant的设备上构建脚本:

cd src 
for F in R.java Maze.java EmptyActivity.java; do 
    javac -d ../build/classes $P/$F 2> ~/tmp/javac.out 
    echo -en "\033[1m"; cat ~/tmp/javac.out; echo -en "\033[0m" 
    grep error ~/tmp/javac.out && exit 
done 
cd .. 
2

看一看这样的:Packaging Programs in JAR Files

一旦你有两个主类和JAR文件准备好了,你可以简单地用类路径的JAR文件运行的主类和J​​ava会发现它。假设demo类是在demo.jar和你的主类是test(如你的例子):

java -cp demo.jar test 
+0

这是一个TYPO。我已将其更正为JAR。 – goyalshub1509 2012-02-07 04:40:43

+0

@ user1193815:我已经更新了我的答案。 – casablanca 2012-02-07 04:45:57

+0

它在线程主要给出一个异常说异常。 java.lang.Noclassdeffounderror:TEST。 – goyalshub1509 2012-02-07 04:55:36

0

简单,如果你想使用任何class in java然后,因为当你运行你的程序的类必须存在于class-path 然后需要所有class一直在寻找在class path ...
所以,你必须设置你的demo.jar
类路径有没有办法来设置类路径来看看这个How set class path

或者干脆你可以做的另一种选择使用java参数-cp

java -cp /your jar path/demo.jar test