从java程序在JAR中执行java类

时间:2012-02-07 04:25:23

标签: java jar mainclass

我的问题是:

我有一个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);
}}

3 个答案:

答案 0 :(得分:2)

看看这个:Packaging Programs in JAR Files

准备好主类和JAR文件之后,只需在类路径上运行带有JAR文件的主类,Java就会找到它。假设demo课程位于demo.jar且您的主要课程为test(如您的示例所示):

java -cp demo.jar test

答案 1 :(得分: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

答案 2 :(得分:0)

我想正确答案我们使用ant'但是:

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 ..