2014-02-11 58 views
-1

我在我的项目文件夹2 packages如何在Java中编译相互依赖的包?

src/main/java/com/scg/domain/*src/main/java/com/scg/util/*。他们两个都有classesimport其他人。 例如: import com.scg.util.AddressClass之一src/main/java/com/scg/domain/import com.scg.domain.TimeCardsrc/main/java/com/scg/util/Class之一。 现在我想编译both packages中的所有Java files

编译所有的Java filessrc/main/java/com/scg/util/

我尝试这样做:

javac -cp src/main/java/com/scg/domain/*:src/main/java/com/scg/util/* src/main/java/com/scg/util/* 

,但它给了我72个错误。我粘贴它的一个样本:两个packages

src/main/java/com/scg/domain/ClientAccount.java:11: error: cannot find symbol 
public final class ClientAccount implements Account { 
              ^
    symbol: class Account 
src/main/java/com/scg/domain/ConsultantTime.java:16: error: cannot find symbol 
    private Account account; 
      ^
    symbol: class Account 
    location: class ConsultantTime 
src/main/java/com/scg/domain/ConsultantTime.java:35: error: cannot find symbol 
    public ConsultantTime(final Date date, final Account account, 
               ^
    symbol: class Account 
    location: class ConsultantTime 
src/main/java/com/scg/domain/ConsultantTime.java:66: error: cannot find symbol 
    public Account getAccount() { 

什么是最简单的方法compile所有java files那里是依赖(我的意思是import这里)。

+1

你是怎么忘记的? http://stackoverflow.com/a/19776757/2970947 –

+0

@ElliottFrisch:那是一个单一的java文件。我想编译所有的类文件。通配符“*”不起作用。 – eagertoLearn

+0

@eagerToLearn在您原来的问题中查看我的回答,或者确实是您在11月份询问的问题,然后将文件名更改为'* .java'。这个问题非常相似,它应该已经与您的原始问题一起发布。同样的答案。请不要混淆与重复和三重复这个网站。 – EJP

回答

1

你应该编译所有的Java源文件一次:

javac src/main/java/com/scg/domain/*.java src/main/java/com/scg/util/*.java 

你的类路径的选择是没有用的,而不是有效的。类路径应该包含包含包树根的目录或jar文件,其中包含您要编译的源文件使用的已编译类。

从命令行编译许多文件对理解编译机制非常有用。但你应该真正学会使用像Gradle或Ant这样的构建工具来构建你的项目,并且在开发过程中使用IDE来编译和测试你的类。

编辑:

重读the documentation,您可以使用-cp指定路径,其中源必须被发现。但是必须指定包树的根:

-cp src/main/java 
+0

我正在使用maven。但是你在命令行中的做法与使用mvn命令不同 –

+0

此答案不正确。他不必一次编译所有的Java源代码。如果他在正确的目录中,例如'src/main/java',他可以发出'javac com/scg/domain/*。java'或'javac com/scg/util/*。java'和所有需要的依赖项会被编译。 – EJP

+0

那么,他不在这个目录中。 –