简单的命令行Java编译

时间:2010-03-15 23:32:48

标签: java command-line compilation

所以我必须向我们公司以外没有java经验的人发送一个java项目,他们需要编译它。有没有一种简单的方法在Windows命令行上执行它,不需要写出文件列表?

我个人认为javac应该足够智能来处理

javac *

在包层次结构根目录下的文件夹中。这个棒球场有什么东西吗?

编辑:源文件夹结构很复杂,并且没有单一的入门类,所以到目前为止提到的一些想法是行不通的。谢谢!在许多级别上使用代码深入了解9级。

5 个答案:

答案 0 :(得分:6)

从代表包层次结构基础的文件夹中,假设您的入口点类名为Main,在名为app的包中,

javac -classpath . app/Main.java

应该生成正确的类定义。编译器将查找依赖项并编译所需的任何其他类。类文件将与其源文件显示在同一目录中。

如果,如你所说,你有'多个条目'类,你必须至少从依赖关系层次中识别所有那些顶级类,可以将其列为javac的更多参数,将包指定为他们发生了。像这样,假设你还需要从other.Entry开始

javac -classpath . app/Main.java other/Entry.java 

请注意,无论是创建ant脚本还是以这种方式执行,您仍然需要弄清楚哪些类是独立依赖层次结构的顶层。

答案 1 :(得分:5)

为他们提供一个Ant脚本,使用类路径上的正确库进行构建等。该脚本还可以执行其他任务,例如构建JAR等。

这要求该人下载并安装Ant,但这并不难。 (并且没有什么可以阻止你为他们提供适当的Ant发行版进行安装。或者甚至向他们发送一个发行版的ZIP文件,该文件在树中有“预安装”的副本。)

提供Ant脚本意味着您可以避免它们陷入Java新手陷阱,例如忘记设置类路径,在错误的目录中,忘记重新编译相关文件等等。此外,它更“专业”。

答案 2 :(得分:3)

javac BaseProgram.java将从当前目录编译BaseProgram.java,并在同一目录树中编译它引用的所有在源代码中可用的类。

如果BaseProgram引用Class1和Class2,并且它们在同一目录中的Class1.java和Class2.java中可用,那么它们也将被编译。同样,如果它们在一个包中,并且包目录可用,它们将被编译。

答案 3 :(得分:2)

您可以构建一个文件,列出您要编译的所有类(从javac手册页中提取) -

  

示例 - 两个Arg文件          您可以创建两个参数文件 - 一个用于javac选项和   另一个源文件 -          名称:(注意以下列表没有行继续   字符)。

   Create a file named options containing:

          -d classes
          -g
          -sourcepath /java/pubs/ws/1.3/src/share/classes

   Create a file named classes containing:

          MyClass1.java
          MyClass2.java
          MyClass3.java

   You would then run javac with:

          % javac @options @classes

或者您可以在命令行上使用* .java,例如

javac greetings/*.java

(再次来自 man javac

或者,为什么不将源代码编译成一个客户可以使用他们的JRE运行的jar - 特别是考虑到他们不精通Java?

答案 4 :(得分:0)

一种简单的方法是使用:

javac *.java.