2011-05-18 114 views
-1

我有以下设置:使用javac从不同目录编译文件,引用依赖的jar文件?

我有4个包:

  • 根/ src目录/终端 - 有一定的Java文件
  • 根/ src目录/邮件 - 有一定的Java文件
  • 根/ SRC /数据 - 具有一些java文件
  • 根/ SRC /主 - 具有单个Java文件,Main.java

我也有以下文件

  • 根/箱 - 存储的.class文件的文件夹
  • 根/ mail.jar中 - 这在我的代码

用在重要的类jar文件根,我想输入一个编译root/src/main/Main.java的终端命令,并将类文件放入根/ bin位置。

有人可以告诉我这个命令吗?我在Mac上(运行Leopard)。

回答

1

这里是一个班轮:

cd /xyz/root 
rm -rf bin/* 
javac -d bin -classpath mail.jar -sourcepath src main/Main.java 

或者,你可以使用绝对路径:

rm -rf /xyz/root/bin/* 
javac -d /xyz/root/bin -classpath /xyz/root/mail.jar \ 
     -sourcepath /xyz/root/src /xyz/root/ main/Main.java 

在谈到蚂蚁你说“我宁愿保持简单。”

事实上,从长远来看,创建一个简单的Ant build.xml文件更简单。另一种选择是一堆不可移植的脚本或批处理文件......或大量的输入。


要运行应用程序,假设你仍然在/xyz/root目录:

java -classpath bin:mail.jar main.Main 

或Windows:

java -classpath bin;mail.jar main.Main 

或修改上述使用的绝对路径类路径参数;例如

java -classpath /xyz/root/bin:/xyz/root/mail.jar main.Main 
+0

当我使用java命令运行程序时,有什么特别的我需要做。这工作得很好! – CodeGuy 2011-05-18 12:00:34

1

不知道您的操作系统?

你应该看看什么是使用Apache Ant。它是一种构建工具,一旦安装和配置,就可以利用根中的build.xml文件将类文件编译到文件夹以及打包jar文件。

http://ant.apache.org/

+0

我宁愿保持简单。有一个简单的一线解决方案,我正在寻找。我不打包罐子。我只是试图链接jar,所以我的java文件知道该jar存在,因为我导入该jar包含的类。 – CodeGuy 2011-05-18 11:41:12

1

试试这个:

javac -cp "/root/mail.jar;/root/src;" -d "/root/bin" Main.java 

这是写入祝愿你俩包声明在你的类从src文件夹一样package terminal;package main;

看到这个:Options in javac command

或者使用Apache Ant的通过maple_shaft的建议。


从评论给由@maple_shaft:
在UNIX,LINUX操作系统的类路径分隔符是一个冒号而不是分号。

+0

我有包声明。不幸的是,这仍然不起作用。它说,没有找到包终端(在我的Main.java中,我导入terminal.Terminal.java) – CodeGuy 2011-05-18 11:44:56

+0

也,因为Main.java是在一个包中,我使它成为main/Main.java而不是 – CodeGuy 2011-05-18 11:47:50

+0

@Harry,In Unix,Linux操作系统类路径分隔符是一个冒号而不是分号。但除此之外,你是对的。 – 2011-05-18 11:49:27