java 编译 器 ide_在没有IDE的情况下编译和运行Java

java 编译 器 ide

最近一个名为“ 不使用IDE编译Java软件包 ”的Java subreddit线程提出了一个问题:“是否有一个命令将软件包内的一组Java文件编译到一个单独的文件夹中(以下简称为bin),以及如何我会去运行新的类文件吗?” 该帖子的作者kylolink解释说:“当我开始使用Java时,我依靠Eclipse为我完成所有编译,而只是担心编写代码。” 我已经多次看到这个问题,实际上,这是促使我(现在已经4岁)的博客文章GPS系统和IDE的原因:有用还是有害? 我喜欢强大的现代Java IDE,它们每天使我的生活变得更轻松,但是了解如何在没有它们的情况下构建和运行简单的Java示例也有很多好处。 这篇文章着重于如何做到这一点。

在我的博客文章“ 通过简单测试学习Java”中 ,我写了一些我有时喜欢使用简单的文本编辑器和命令行工具来编写,构建和运行简单应用程序的方式。 我现在有一个很好的主意,我最喜欢的Java IDE需要多少“开销”,并尽早决定使用IDE获得的好处是否足以保证“开销”。 在大多数实际应用程序中,毫无疑问,IDE“开销”是值得的。 但是,对于最简单的示例应用程序,并非总是如此。 本文的其余部分显示了在这些情况下如何在没有IDE的情况下构建和运行Java代码。

要构建和执行的Java代码

为了使本文的讨论更加具体,我将使用一些非常简单的Java类,这些Java类通过组合或继承相互关联,并且位于相同名称的包中(而不是未命名的包中 ),称为dustin.examples 。 其中两个类没有main函数,而第三个类Main.java确实具有一个main函数,以允许演示如何在没有IDE的情况下运行该类。 接下来显示这三个类的代码清单。

Parent.java

package dustin.examples;public class Parent
{@Overridepublic String toString(){return "I'm the Parent.";}
}

Child.java

package dustin.examples;public class Child extends Parent
{@Overridepublic 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 dustin/examples ),并且反映包的目录层次结构在名为src的子目录下。 我还创建了classes子目录(当前为空)来放置已编译的.class文件,因为javac该目录不存在时不会创建该目录。

使用Javac进行构建并使用Java运行

无论使用哪种方法来构建Java代码(Ant,Maven,Gradle或IDE),它最终都归结为javac 。 通过运行javac -help可以看到Oracle / Sun提供的javac 命令行工具的标准选项,而通过运行javac -help -X可以查看其他扩展选项。 在Windows或Unix / Linux的 javac的工具文档中可以找到有关如何应用这些选项的更多详细信息。

如javac文档所述, -sourcepath选项可用于表示源文件所在的目录。 在上面的屏幕快照中显示的目录结构中,这意味着,假设我正在C:\java\examples\javacAndJava\目录中运行javac命令,则我的命令中需要具有以下内容: javac -sourcepath src src\dustin\examples\*.java 。 下一个屏幕快照显示了此结果。

javacCompilingPackageDirectoryButToSameDirForClasses

因为我们没有为.class文件指定目标目录,所以默认情况下将它们与编译它们的源.java文件放在同一目录中。 我们可以使用-d选项纠正这种情况。 我们的命令现在可以运行,例如,作为javac -sourcepath src -d classes src\dustin\examples\*.java 。 如前所述,指定的目标目录( classes )必须已经存在。 完成后,该命令会将.class文件放置在指定的目录中,如下一个屏幕快照所示。

javacDoptionPlacesClassesCorrectDir

将Java源文件编译为指定目录中的相应.class文件之后,我们现在可以使用Java应用程序启动器命令行工具java运行该应用程序。 只需按照java -help或java工具页面上显示的说明并使用-classpath (或-cp )选项指定.class文件的位置即可完成。 在下一个屏幕快照中演示了使用这两种方法指定classes目录是查找.class文件的位置。 最后一个参数是具有要执行的main功能的类的标准名称(整个Java程序包)。 在下一个屏幕快照中演示的命令是java -cp classes dustin.examples.Mainjava -classpath classes dustin.examples.Main

javaRunningSimpleExamplesParentChildMain

使用Ant构建并运行

对于最简单的Java应用程序,使用javacjava分别构建和执行该应用程序非常简单,如刚刚演示的那样。 随着应用程序的参与度提高(例如,存在于多个软件包/目录中的代码或第三方库和框架上更复杂的类路径依赖项),这种方法可能变得笨拙。 Apache Ant是Java构建工具“三巨头 ”中最古老的一种,已在数千个应用程序和部署中使用。 正如我在前一篇博客文章中所讨论的那样 ,很容易创建一个非常基本的Ant构建文件,尤其是如果该文件以我在该文章中概述的模板开头的话。

下一个代码清单是针对Ant build.xml文件的,该文件可用于将.java文件编译为.class文件,然后运行dustin.examples.Main类,就像上面对javacjava所做的那样。

build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="BuildingSansIDE" default="run" basedir="."><description>Building Simple Java Applications Without An IDE</description><target name="compile"description="Compile the Java code."><javac srcdir="src"destdir="classes"debug="true"includeantruntime="false" /></target><target name="run" depends="compile"description="Run the Java application."><java classname="dustin.examples.Main" fork="true"><classpath><pathelement path="classes"/></classpath></java></target>
</project>

我没有使用过Ant属性,也没有包括我通常包含的公共目标(例如“ clean”和“ javadoc”),以使该示例尽可能简单,并使之与使用javacjava的上一个示例保持接近。 还要注意,我为javac Ant任务包括了将“ debug”设置为“ true”的原因,因为在Ant的默认设置中它不是true,而在javac的默认值中是true。 毫不奇怪,Ant的javac任务和java任务与命令工具javacjava非常相似。

因为我使用了未明确指定构建文件的Ant期望的默认名称( build.xml ),并且因为我将“运行”目标作为该构建文件的“默认”,并且因为我将“编译”作为依赖项,要运行“运行”目标,并且由于Ant在我环境的路径上,因此我需要在命令行上执行以使Ant编译并运行该示例的所有操作是在带有build.xml文件的目录中键入“ ant”。 下一个屏幕快照对此进行了演示。

antCompilingAndRunningSimpleJavaApp

尽管我演示了如何使用Ant编译和运行简单的Java应用程序,但是我通常仅使用Ant编译并使用java (或者如果类路径令人讨厌的话,会调用java的脚本)运行。

使用Maven构建和运行

尽管Ant是第一个主流的Java构建工具,但是Apache Maven最终获得了自己的显著成就,这在很大程度上要归功于它采用了约定的配置方式以及对库的通用存储库的支持。 当代码和生成的对象符合其标准目录布局时,Maven最容易使用。 不幸的是,我的示例没有遵循此目录结构,但是Maven允许我们覆盖预期的默认目录结构 。 下一个代码清单是针对Maven POM文件的,该文件将覆盖源目录和目标目录,并为使用Maven 3.2.1的Maven构建提供其他最低要求的元素。

pom.xml

<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>

因为上面的pom.xml文件将“ defaultGoal”指定为“ compile”,并且因为pom.xml是Maven可执行文件(mvn)查找的默认自定义POM文件,并且因为Maven安装的bin目录在我的路径上,所以我只需要运行“ mvn”来编译.class文件,如下一个屏幕快照所示。

mavenCompilingJavaCode

我还可以使用命令mvn exec:java -Dexec.mainClass=dustin.examples.Main使用Maven运行编译后的应用程序,这将在下一个屏幕快照中演示。

mavenRunningSimpleApp

与Ant一样,我通常不使用Maven运行我的简单Java应用程序,而是在编译后的代码上使用java (或使用直接为长类路径调用java的脚本)。

使用Gradle构建和运行

Gradle是三种主要Java构建工具中最年轻,最时髦和最时髦的。 有时,我对流行趋势的实质持怀疑态度,但是我发现Gradle有很多令人喜欢的地方 (用Groovy而不是XML编写,内置的Ant支持,内置的Ivy支持,按约定容易被覆盖的配置) ,Maven存储库支持等)。 下一个示例显示了一个Gradle构建文件,该文件可用于编译和运行简单应用程序,这是本文的主要示例代码。 它改编自我在博客文章Simple Gradle Java Plugin Customization中介绍的示例。

build.gradle

apply plugin: 'java'
apply plugin: 'application'// Redefine where Gradle should expect Java source files (*.java)
sourceSets {main {java {srcDirs 'src'}}
}// Redefine where .class files are written
sourceSets.main.output.classesDir = file("classes")// Specify main class to be executed
mainClassName = "dustin.examples.Main"defaultTasks 'compileJava', 'run'

build.gradle文件的前两行指定Java插件和Application插件的应用程序 ,从而自动为该版本带来了很多功能。 “ sourceSets”和“ sourceSets.main.output.classesDir”的定义允许分别覆盖Gradle的Java插件的Java源代码和编译的二进制类的默认目录。 “ mainClassName”允许显式指定应作为Application插件的一部分运行的类。 “ defaultTasks”行通过在命令行中简单地键入“ gradle”来指定要运行的任务:“ compileJava”是Java插件提供的标准任务,“ run”是Application插件提供的标准任务。 因为我将构建文件命名为build.gradle并且因为我指定了默认任务'compileJava'和'run',并且因为我的路径上有Gradle安装bin目录,所以我要做的就是构建和运行示例。键入“ gradle”,这将在下一个屏幕快照中演示。

gradleBuildAndRunSimpleExampleJavacJava

即使是最大的怀疑论者也不得不承认,对于这个简单的示例,Gradle的构建非常巧妙。 它结合了依靠某些约定和假设的简洁性,以及根据需要覆盖选择默认值的非常简单的机制。 它使用Groovy而不是XML的事实也非常吸引人!

与Ant和Maven一样,我倾向于仅使用这些工具进行构建,并且通常直接使用java或调用java的脚本直接运行已编译的.class文件。 顺便说一句,我通常也将这些.class存档到运行中的JAR中,但这超出了本文的范围。

结论

IDE通常对于构建简单的应用程序和示例不是必需的,甚至可能比最简单的示例值得拥有更多的开销。 在这种情况下,直接应用javacjava来构建和运行示例相当容易。 随着示例变得越来越复杂,诸如Ant,Maven或Gradle之类的构建工具变得越来越有吸引力。 许多IDE支持这些构建工具的事实意味着,如果在简单的应用程序发展成为一个成熟的项目时确定需要IDE支持,则开发人员可以使用在过程中较早创建的构建工具过渡到IDE。

翻译自: https://www.javacodegeeks.com/2014/04/compiling-and-running-java-without-an-ide.html

java 编译 器 ide

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光纤收发器的工作原理以及使用方法

关于光纤收发器的工作原理以及使用方法这块&#xff0c;在这里飞畅科技的小编做了专门的整理&#xff0c;首先&#xff0c;我们来了解下什么是光纤收发器&#xff0c;光纤收发器是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元&#xff0c;在很…

Spring Boot登录选项快速指南

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 在本文中&#xff0c;您将研究使用Spring Boot 2.1实现登录功能的各种选项。 您将从最…

光纤收发器的故障处理

在之前&#xff0c;我们详细地介绍了光纤收发器的分类&#xff0c;我们了解到光纤收发器有单模、多模之分&#xff0c;单纤多纤之分&#xff0c;但是不管光纤收发器是怎么分类的&#xff0c;其故障的判断方法基本是一样的&#xff0c;总结起来光纤收发器所会出现的故障有&#…

光纤收发器怎么使用?

在网络建设及应用中&#xff0c;由于网线最大的传输距离一般为100米&#xff0c;因此布建远距离传输网络的时候不得不使用光纤收发器等中继设备。光纤收发器一般应用在以太网电缆无法覆盖、必须使用光纤来延长传输距离的实际网络环境中。那么&#xff0c;光纤收发器该如何使用呢…

光纤收发器通常具有哪些特点?

光纤收发器&#xff0c;是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元&#xff0c;在很多地方也被称之为光电转换器&#xff0c;其产品一般应用在以太网电缆无法覆盖、必须使用光纤来延长传输距离的实际网络环境中&#xff0c;且通常定位于宽…

lambda 高并发_玩Java 8 – Lambda和并发

lambda 高并发因此Java 8不久前发布&#xff0c;具有大量功能和更改。 我们所有的Java狂热者一直在等待这一点&#xff0c;从他们最初宣布Java 7的所有强大功能开始一直到最终被取消。 我最近才有时间实际开始给它一个真实的外观&#xff0c;我将我的家庭项目更新为8个&#x…

光纤收发器的选择与维护!

光纤收发器在弱电工程中的使用是非常普遍&#xff0c;那么&#xff0c;我们在工程项目中该如何选择光纤收发器&#xff1f;当光纤收发器出现故障问题了&#xff0c;又该如何维护呢&#xff1f;这些问题对于新手来说都是难题&#xff0c;今天杭州飞畅的小编就来为大家分享一下关…

回调地狱和反应模式

我可以更好地了解a的用途的一种方式 基于反应流的方法是它简化了无阻塞IO调用的方式。 这篇文章将快速讲解进行同步远程调用所涉及的那种代码&#xff0c;然后说明如何在非阻塞IO中分层&#xff0c;尽管在资源&#xff08;尤其是线程&#xff09;的使用方面非常高效&#xff…

光纤收发器的实际应用范围介绍

众所周知&#xff0c;光纤收发器的有很多不同的分类&#xff0c;种类很多&#xff0c;在实际使用中大多注意的是按光纤接头不同而区分的类别&#xff1a;SC接头光纤收发器和FC/ST接头光纤收发器。接下来小编就来为大家介绍下光纤收发器的具体应用范围有哪些&#xff0c;想要了解…

光纤收发器的优势介绍

提到光纤收发器&#xff0c;人们常常不免会将光纤收发器与带光口的交换机来进行比较&#xff0c;下面咱们就主要来谈一下光纤收发器相对于光口交换机的优势。想要了解的朋友就一起来看看吧&#xff01; 首先&#xff0c;光纤收发器和普通交换机在价格上远远比光口交换机便宜&a…

[渝粤教育] 南通大学 分子生物学 参考 资料

教育 -分子生物学-章节资料考试资料-南通大学【】 第二章 思考题 第二章 测试 1、【单选题】核酸的基本组成单位是 A、A.磷酸和核糖 B、B.核苷和碱基 C、C.单核苷酸 D、D.脱氧核苷和碱基 参考资料【 】 2、【单选题】DNA与RNA完全水解后&#xff0c;其产物的特点是 A、A.戊糖不…

[渝粤教育] 南通大学 大学计算机信息技术基础 参考 资料

教育 -大学计算机信息技术基础-章节资料考试资料-南通大学【】 数制转换 1、【填空题】与十六进制数(BC)16等值的八进制数是___________ 。 A、 参考资料【 】 2、【填空题】十进制数205.5的八进制表示是___________________。 A、 参考资料【 】 整数在计算机中的表示 1、【填…

Selenium脚本编写技巧和窍门

如果您刚刚开始学习硒&#xff0c;则以下技巧和窍门将成为您的救星。 这些技巧和窍门具有您可能会忘记的所有基本知识&#xff0c;将帮助您记住所有这些。 您只需浏览一下它们&#xff0c;几秒钟后您就会了解所有内容。 让我们一一看一下所有的技巧和窍门。 创建Webdriver实例…

光纤收发器在使用过程中有哪些需要注意的事项?

光纤收发器的种类非常丰富&#xff0c;而在实际使用中大多是按照光纤接头不同进行区分&#xff0c;SC接头光纤收发器和FC/ST接头光纤收发器。今天&#xff0c;飞畅科技的小编就带大家来详细了解下光纤收发器在使用过程中需要注意的事项有哪些&#xff1f;一起来看看吧&#xff…

[渝粤教育] 南通大学 电路分析 参考 资料

教育 -电路分析-章节资料考试资料-南通大学【】 随堂测验&#xff1a;关联方向和非关联方向判断 1、【填空题】图中所示的电压源电压、电流i参考方向为 方向&#xff0c;电流源电压u、电流i参考方向为 方向。 A、 参考资料【 】 随堂测验&#xff1a;电源功率计算及判断 1、【填…

光纤收发器发展趋势

现如今&#xff0c;随着互联网的高速发展&#xff0c;以太网的局域发展已经无法适应其发展了&#xff0c;因此出现了光纤收发器这种设备&#xff0c;来进行长距离的光信号输送&#xff0c;这样可以扩大光网的使用范围&#xff0c;使更多的人能够受到网络的优惠和速度。接下来飞…

[渝粤教育] 南通职业大学 混合动力汽车构造与检修 参考 资料

教育 -混合动力汽车构造与检修-章节资料考试资料-南通职业大学【】 单元测验1 1、【单选题】混合动力汽车的英文简称是&#xff08;&#xff09; A、EV B、FCV C、HEV D、HHV 参考资料【 】 2、【单选题】本课程主要讲的混合动力汽车是 A、太阳能燃油 B、燃油氢燃料 C、燃油动力…

[渝粤教育] 南阳理工学院 大学计算机基础 参考 资料

教育 -大学计算机基础-章节资料考试资料-南阳理工学院【】 第一章单元测验 1、【单选题】大学计算机中所要学习的计算思维是指( )。 A、计算机相关的知识 B、算法与设计技巧 C、知识与技巧的结合 D、蕴含在计算科学知识背后的具有贯通性和联想性的内容 参考资料【 】 2、【单选…

光纤收发器和协议转换器之间有哪些区别?

在通信网络领域&#xff0c;我们经常会用到光纤收发器和协议转换器&#xff0c;但对此不是很了解的朋友&#xff0c;往往可能会将二者搞混淆。那么&#xff0c;关于光纤收发器与协议转换器之间有什么区别呢&#xff1f;接下来就跟随杭州飞畅的小编一起来看看吧&#xff01; 光…

[渝粤教育] 周口师范学院 大学计算机基础 参考 资料

教育 -大学计算机基础-章节资料考试资料-周口师范学院【】 随堂测验 1、【单选题】计算机数据的一个基本特点是&#xff08; &#xff09;。 A、只能表示计算所用的数值 B、以各种形式存储在内存中 C、都是以二进制形式存储在存储器上 D、所有的数据按存储器类型组织 参考资料【…