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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3512603/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 01:24:51  来源:igfitidea点击:

Compiling multiple packages using the command line in Java

javacommand-linecompiler-constructionpackagesjavac

提问by Altober

Hi i have been using an IDE but now I need to run and compile from the command line.

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

The problem is that I have multiple packages and I have tried to find the answer but nothing has worked.

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

So I have

所以我有

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

Do you know how to compile everything with javac?

你知道如何用 javac 编译所有东西吗?

采纳答案by Michael Borgwardt

This should do it (may require additional classpath elements via the -cpcommand line switch):

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

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

But if your build process gets more complex (and it will!), you should look into using Apache Antfor build automation.

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

回答by pavanlimo

You should use build tools like Mavenor Antfor such tasks.

对于此类任务,您应该使用MavenAnt等构建工具。

In the initial stages, when the project is not very complex you can use the following line to compile, with appropriate classpath in place(as suggested by @Michael):

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

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

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

回答by Ken Bloom

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

回答by Moritz

If you really need to just use javac and standard UNIX commands you could to this:

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

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

回答by aepryus

In many cases Ant is overkill. Just use a BAT file if you are in windows or a shell script (sh file) if you are in linux. You can create a text file which includes all your javac commands and just run that file when you want to build.

在许多情况下,Ant 是矫枉过正的。如果您在 Windows 中,只需使用 BAT 文件,如果您在 linux 中,则使用 shell 脚本(sh 文件)。您可以创建一个包含所有 javac 命令的文本文件,并在您想要构建时运行该文件。

For example, I use the following bat file to build one of my apps:

例如,我使用以下 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

回答by pratyush

The real answer is javac -d (places where classes to be built and placed) -sourcepath (source of the package at the root) -cp (classpath of the dependencies which can again be classes folder where the classes are build and kept) full qualified name of the java file.

真正的答案是 javac -d(要构建和放置类的地方)-sourcepath(根目录下的包源)-cp(依赖项的类路径,它可以再次是构建和保存类的类文件夹)完整java 文件的限定名称。

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

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

The FirstSample.java contains the main method. Pacjage structure mentioned below.

FirstSample.java 包含主要方法。下面提到的包结构。

Before compiling
HomeApp
--src
------com\test\FirstSample.java (First Sample using the FirstPojo.java)
------com\test\FirstPojo.java
--classes

编译
HomeApp 之前
--src
------com\test\FirstSample.java (First Sample using the FirstPojo.java)
------com\test\FirstPojo.java
--classes

After compiling
HomeApp
--src
------com\test\FirstSample.java (FirstSample.java using the FirstPojo.java)
------com\test\FirstPojo.java
--classes
------com\test\FirstSample.class (FirstSample.class using the FirstPojo.class)
------com\test\FirstPojo.class

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