使用Java中的命令行编译多个包

时间:2010-08-18 13:30:38

标签: java command-line compiler-construction packages javac

您好我一直在使用IDE,但现在我需要从命令行运行和编译。

问题是我有多个包,我试图找到答案,但没有任何效果。

所以我有

src/
  Support/ (.java files)
  Me/ (.java files) 
  Wrapers/ (.java files)  

你知道如何使用javac编译所有内容吗?

7 个答案:

答案 0 :(得分:9)

您应该使用MavenAnt等构建工具来执行此类任务。

在初始阶段,当项目不是很复杂时,您可以使用以下行进行编译,并使用适当的类路径(如@Michael所建议):

javac Support/*.java Me/*.java Wrapers/*.java

答案 1 :(得分:8)

这应该这样做(可能需要通过-cp命令行开关添加其他类路径元素):

javac Support/*.java Me/*.java Wrapers/*.java

但是如果你的构建过程变得更复杂(并且它会!),你应该考虑使用Apache Ant进行构建自动化。

答案 2 :(得分:6)

javac -d compiled $(find src -name *.java)

答案 3 :(得分:2)

如果你真的需要使用javac和标准UNIX命令,你可以这样做:

find src -name \*.java -print0 | xargs -0 javac -d classes

答案 4 :(得分:0)

在很多情况下,Ant太过分了。如果你在linux中,只要使用BAT文件,或者使用shell文件(sh文件)。您可以创建一个包含所有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

答案 5 :(得分:0)

真正的答案是javac -d(要构建和放置的类的位置)-sourcepath(根目录下的包的源代码)-cp(依赖项的类路径,它们也可以是类所在的类文件夹,以及保留)java文件的完全限定名称。

Ex javac -d classes -sourcepath src -cp classes src \ com \ test \ FirstSample.java

FirstSample.java包含main方法。 Pacjage结构如下所述。

编译前
HomeApp
--src
------ com \ test \ FirstSample.java(使用FirstPojo.java的第一个示例)
------ COM \测试\ FirstPojo.java
--classes

编译后
HomeApp
--src
------ com \ test \ FirstSample.java(FirstSample.java使用FirstPojo.java)
------ COM \测试\ FirstPojo.java
--classes
------ com \ test \ FirstSample.class(FirstSample.class使用FirstPojo.class)
------ COM \测试\ FirstPojo.class

答案 6 :(得分:0)

  1. 编译运行下面的命令[它会将所有类文件存储在类文件夹中]

    javac -d classes Support/*.java Me/*.java Wrapers/*.java

**注意:应先创建classes文件夹

  1. 要运行 java 应用程序,请运行以下命令

    java -cp classes {mainfile_name}

用您的主文件替换 mainfile_name。