您的位置:首页 > 编程语言 > Java开发

无IDE时编译和运行Java

2016-01-29 10:03 363 查看
最近 Java subreddit 出现了一篇”在没有IDE的情况下编译Java包” 的帖子,这个帖子抛出了这么一个问题,“是否存在一个命令可以编译一组处于同一文件夹下独立包内的java文件的方法(这称之为bin),同时怎样运行新的类文件呢?” 它的提出者 kylolink解释说,“当我开始依赖Eclipse来编写代码时就开始担心没有Eclipse时自己该怎么写代码了。” 我看过很多次这类问题,事实上,这促使我(目前已经四年了)发了一篇文章: GPS系统和IDE:究竟是好还是坏? 我喜欢强大的现代化的Java的集成开发环境(IDE),因为它使得我的编程更加轻松,但知道如何构建和运行简单的Java示例也是有必要的,这篇文章主要就是着重于如何做到这些的。
我博客中一篇文章 通过简单的测试学习Java,其中写了我喜欢用一个简单的文本编辑器和命令行工具来编写并且运行简单的程序。现在我有个很棒的想法,是关于我最喜欢的Java IDE的,即早期决定使用IDE的好处是为了保证“开销”。在大多数实际应用程序中,毫无疑问IDE的开销是值得的。然而,对于最简单的示例应用程序并非总是如此。这篇文章的剩余部分展示了在没有遇到这些情况的前提下是如何构建和运行Java代码的。

建立和运行Java代码

为了对这篇文章进行更具体的讨论,我将使用一些非常简单的Java类,在同一个包中通过彼此相关的组合或继承(不在 未命名的包中)来调用
dustin.examples
。这两个在第三个类之前是没有
main
函数的,直到
Main.java
才有
main
函数为了在没有IDE的情况下运行示例。三个类的代码清单如下。

Parent.java


Child.java

[code;'>package dustin.examples;

public class Child extends Parent
{
@Override
public String toString()
{
return "I'm the Child.";
}
}

Main.java

package dustin.examples;

import static java.lang.System.out;

public class Main
{
private final Parent parent = new Parent();
private final Child child = new Child();

public static void main(final String[] arguments)
{
final Main instance = new Main();
out.println(instance.parent);
out.println(instance.child);
}
}

接下来显示了目录结构与这些类的
.java
源文件。截图显示源文件的目录层次结构代表了包名(
dustin/examples
源自包
dustin.examples
)和该子目录下被称为package-reflecting的目录层次结构
src
。我还创建了
classes
子目录(当前为空)用于存放编译后文件
.class
文件,因为
javac
在目录不存在的情况下不会创建该目录。

用javac构建和运行java

无论使用哪种方法正常地构建Java代码(Ant, Maven, Gradle, 或者 IDE),我相信谨慎的做法是,至少了解如何使用 javac来构建Java代码。Oracle/Sun的支持者们使用 javac 命令行工具的基本项来运行,
javac -help
也可以运行
javac -help -X
来查看其它的扩展选项。如何应用这些选项的更多细节可以在 Windows 或者 Unix/Linux
javac
的文档工具查看。

当进入 javac 文档 时,
-sourcepath
选项可以被用来表示源文件存在的路径。在上面所呈现的目录结构中,假设我在运行
C:\java\examples\javacAndJava\
目录的
javac
命令,这将意味着会需要这样的命令:
javac -sourcepath src src\dustin\examples\*.java
。下一张截图显示了结果。

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>dustin.examples</groupId>
<artifactId>CompilingAndRunningWithoutIDE</artifactId>
<version>1</version>

<build>
<defaultGoal>compile</defaultGoal>
<sourceDirectory>src</sourceDirectory>
<outputDirectory>classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
</build>
</project>[/code]
因为上面的
pom.xml
文件指定了一个“compile”的“defaultGoal”,
pom.xml
是默认定义的POM文件,用执行器(mvn)来搜索,因为Maven安装的
bin
文件夹在我的path环境变量中,我只需要运行“mvn”来编译
.class
文件,这在下张截图中将会显示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: