所以我必须向我们公司以外没有java经验的人发送一个java项目,他们需要编译它。有没有一种简单的方法在Windows命令行上执行它,不需要写出文件列表?
我个人认为javac应该足够智能来处理
javac *
在包层次结构根目录下的文件夹中。这个棒球场有什么东西吗?
编辑:源文件夹结构很复杂,并且没有单一的入门类,所以到目前为止提到的一些想法是行不通的。谢谢!在许多级别上使用代码深入了解9级。
答案 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.