我的问题是:
我有一个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);
}}
答案 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 ..