嗨,我一直在使用IDE,但现在我需要从命令行运行和编译。使用Java中的命令行编译多个软件包
问题是我有多个包,我试图找到答案,但没有任何工作。
所以我
src/
Support/ (.java files)
Me/ (.java files)
Wrapers/ (.java files)
你知道如何编译用javac一切吗?
嗨,我一直在使用IDE,但现在我需要从命令行运行和编译。使用Java中的命令行编译多个软件包
问题是我有多个包,我试图找到答案,但没有任何工作。
所以我
src/
Support/ (.java files)
Me/ (.java files)
Wrapers/ (.java files)
你知道如何编译用javac一切吗?
这应该做它(可能需要通过-cp
命令行开关的其他路径元素):
javac Support/*.java Me/*.java Wrapers/*.java
但是,如果你的构建过程变得更加复杂(它会!),你应该考虑使用Apache Ant用于构建自动化。
如果你真的只是需要使用javac和标准UNIX命令,你可以这样:
find src -name \*.java -print0 | xargs -0 javac -d classes
在许多情况下,蚂蚁是矫枉过正。如果你使用的是windows或shell脚本(sh文件),只要使用BAT文件即可。您可以创建一个包含所有javac命令的文本文件,并在您想构建时运行该文件。
例如,我用下面的bat文件来构建我的应用程序之一:
@echo off
echo Building Shazaam...
del classes\com\aepryus\shazaam\*.* /q
del classes\com\aepryus\shazaam\engine\*.* /q
del classes\com\aepryus\shazaam\domain\*.* /q
del classes\com\aepryus\shazaam\persist\*.* /q
del classes\com\aepryus\shazaam\view\*.* /q
del classes\com\aepryus\shazaam\task\*.* /q
del classes\com\aepryus\shazaam\action\*.* /q
del classes\com\aepryus\shazaam\controller\*.* /q
javac src\com\aepryus\shazaam\*.java -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar; -d classes
javac src\com\aepryus\shazaam\engine\*.java -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\domain\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\persist\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\view\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\task\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\action\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\controller\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepRPC.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
cd classes
jar cf ..\war\WEB-INF\lib\Shazaam.jar .
cd..
echo Complete
如果你重构一个包或者添加一个新的包,你每次都必须触摸这个文件?有一个http://skillsmatter.com/podcast/java-jee/zen-and-the-art-of-build-script-maintenance的手表,如果你需要说服... – 2010-08-18 13:56:45
不知道别人。但是在项目过程中,我需要修改这样一个批处理文件的次数是微乎其微的。毫无疑问,Maven和Ant是有保证的;但我没有遇到过它们。有时为了杀死一只苍蝇,一把关枪不是必要的(也不是核弹) – aepryus 2010-08-18 14:10:05
真正的答案是javac的-d -sourcepath(其中类建立和安装的地方)(来源包的根目录)-cp(依赖关系的类路径,它可以再次成为构建和保存类的类文件夹)Java文件的全限定名称。
实施例的javac -d类-sourcepath SRC -cp类SRC \ COM \测试\ FirstSample.java
的FirstSample.java包含的主要方法。 Pacjage结构如下所述。
之前编译
HomeApp
--src
------ COM \测试\ FirstSample.java(使用FirstPojo.java第一个样品)
------ COM \测试\ FirstPojo.java
--classes
编译
HomeApp
--src 后------ com \ test \ FirstSample.java(FirstSample.java使用FirstPojo。JAVA)
------ COM \测试\ FirstPojo.java
--classes
------ COM \测试\ FirstSample.class(FirstSample.class使用FirstPojo.class)
- ----- com \ test \ FirstPojo.class
+1 - 对于一个外部最少的项目依赖,Ant比(例如)Maven更简单。他的IDE甚至可以生成一个初始的“build.xml”文件。 – 2010-08-18 13:39:33
谢谢我试过这个,它编译所有东西,但它不会生成类结构,所以当我尝试运行我的主要它说:“”main“java.lang.NoClassDefFoundError:Wrapper/java” – Altober 2010-08-18 13:46:56
@Altober:'java'工具期望*类名*,而不是文件名,特别是不是源文件名。你可能需要做一些事情,比如'java wrapers.wrapper',假设你在一个包中有一个类“Wrapper”“Wrapers” – 2010-08-18 13:50:06