




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最近看到一个帖子啊,给转一下!最近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.javapackage dustin.examples;public class Parent Override public String toString() return Im the Parent.; Child.javapackage dustin.examples;public class Child extends Parent Override public String toString() return Im the Child.; Main.javapackage 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:javaexamplesjavacAndJava目录的javac命令,这将意味着会需要这样的命令:javac -sourcepath src srcdustinexamples*.java。下一张截图显示了结果。因为我们没有指定.class文件的目标目录,在默认情况下它们被放置在同一个目录下被编译的.java源文件。我们可以使用-d选项来纠正这种情况。我们现在可以运行的命令,例如javac -sourcepath src -d classes srcdustinexamples*.java。如前所述,指定目标目录(classes)必须是存在的。这样,命令将会在下面的截图指定的目录下定位.class文件。用Java源文件编译成适当的.class文件在指定的目录中,我们现在可以运行Java应用程序启动命令行工具java。这仅仅是通过byjava -help所示的指令或者是java工具页和.class文件的-classpath所指定的地方(或-cp)选项。使用两种方法来指定classes目录以便用于找到.class文件,接下来的截图印证了这点。最后一个参数是完全合格的(整个Java包)类名,它有一个main函数来执行。下面的截图显示了java -cp classes dustin.examples.Main和java -classpath classes dustin.examples.Main的命令。构建和运行Ant对于最简单的Java应用程序,javacandjava使用起来非常简单,它们用于构建并执行应用程序就分别证明了这一点。应用程序会稍微复杂一点(如代码中存在多个包/目录或更复杂的依赖于第三方库和框架的类路径),但这种方法非常难用。Apache Ant是最古老的“三巨头”,它是被用于成千上万的应用程序部署的Java构建工具。正如我讨论过以前的一篇博客,一个基础的Ant构建文件很容易被创建,特别是如果都始于一个模板就像我在这篇文章中介绍的一样。接下来的代码是Ant的build.xml文件的,它将.java文件 编译成.class文件然后运行dustin.examples.Main类就像上面的javac和java一样。build.xml Building Simple Java Applications Without An IDE 我没有使用Ant也没有包括一般所用的方式(例如 “clean” 和 “javadoc”),我使用的是javac和java来使例子尽可能的简单。请注意我使用了”debug”来给javac Ant 任务设置”true”;因为这不是Ant的默认方式而是javac的默认方式。的确,Ant的javac task和java task与javacandjava的命令工具非常相似。因为我希望使用默认名称Ant来构建文件的时候不显式指定(build.xml),因为我提供“运行”的目标,构建文件的“默认形式”,因为“编译”作为一个依赖包括“运行”的目标,此外Ant是我的环境路径,我所需要做的是在命令行上让Ant来编译运行目录下的“ant”类型的build.xml文件示例,下图就印证了这一点。虽然我演示了用Ant编译和运行一个简单的Java应用程序,通常我只用Ant进行编译同时用java来运行(或者如果classpath非常复杂时就使用java脚本来执行)。用Maven来搭建和运行虽然Ant是第一个主流的Java构建工具,Apache Maven最终获得了成功在很大程度上要感谢它采用的配置是按照惯例同时也支持常见的库。当代码和生成的标准目录布局对象一致时,Maven很容易使用。很遗憾,我的例子不遵循这个目录结构,但Maven允许我覆盖默认的目录结构。下面的Maven POM文件覆盖了源代码和目标目录以及提供了一个Maven构建所需的最小元素,此时Maven的版本是Maven 3.2.1。pom.xml 4.0.0 dustin.examples CompilingAndRunningWithoutIDE 1 compile src classes $project.artifactId-$project.version 因为上面的pom.xml文件指定了一个“compile”的“defaultGoal”,pom.xml是默认定义的POM文件,用执行器(mvn)来搜索,因为Maven安装的bin文件夹在我的path环境变量中,我只需要运行“mvn”来编译.class文件,这在下张截图中将会显示。我也可以用Maven的mvn exec:java -Dexec.mainClass=dustin.examples.Main命令来运行编译后的应用程序,下图得以展示。与Ant一样,我通常不使用Maven运行简单的Java应用程序,而是用java运行编译后的代码(或者使用脚本直接调用java的classpath路径)。用Gradle构建和运行Gradle是最新,最流行和最时尚的三大主流Java构建工具之一。我有时会怀疑时髦东西的本质,但是我发现了有不少东西例如Gradle(用Groovy编写的XML, 内置Ant支持和Ivy支持,配置按照惯例很容易被覆盖,Maven存储库支持等)。下一个例子显示了一个Gradle构建文件,它可用于编译和运行一个简单的应用程序,这里主要展示一下示例代码。它改编自我在博客简单Gradle Java插件定义的例子。build.gradleapply plugin: javaapply plugin: application/ Redefine where Gradle should expect Java source files (*.java)sourceSets main java srcDirs src / Redefine where .class files are writtensourceSets.main.output.classesDir = file(classes)/ Specify main class to be executedmainClassName = dustin.examples.MaindefaultTasks compileJava, run前两行build.gradle文件指定Java plugin和Application plugin的应用程序,它将许多功能自动构建。“sourceSets” 和 “sourceSets.main.output.classesDir”的定义允许覆盖Gradles Java 插件各自的Java源代码和编译文件类的默认目录。“mainClassName”明确了规范类应该作为应用程序的一部分插件运行。“defaultTasks”指定要运行的任务,只需在命令行键入:compileJava是一个标准的提供任务的Java插件,run是一个标准的提供任务的应用程序的插件。因为我称构建文件为build.gradle,因为我指定默认的compileJava任务和run 方式,因为我有Gradle的bin文件夹安装目录,我需要做的就是构建和运行示例来 键入“gradle”命令,接下来将得到证实。甚至最大的怀疑者都承认Gradle构建对于这个简单示例都非常方便。它的某些约定和假设结合了简洁的依赖,很容易根据需要重写选择违约的机制。这一事实,这在Groovy而不是XML中也非常吸引人!Ant和Maven一样,我倾向于只用这些工具,通过java或者脚
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026大理大学第一附属医院开展校园招聘(16人)考试模拟试题及答案解析
- 2025河北邯郸市体育运动学校选聘体育教练员3人考前自测高频考点模拟试题及一套答案详解
- 2025年山东省标准化研究院公开招聘人员考前自测高频考点模拟试题附答案详解(黄金题型)
- 2025江苏盐城工学院招聘7人考前自测高频考点模拟试题及1套完整答案详解
- 2025广东深圳大学彭孝军院士团队专职研究员招聘2名模拟试卷及答案详解(各地真题)
- 有机种子银行创新创业项目商业计划书
- 2025年宿州市宿马园区两站两员招聘11人模拟试卷及答案详解(网校专用)
- 2025年威海荣成市教育和体育局公开招聘教师(53人)模拟试卷及一套参考答案详解
- 2025北京市房山区韩村河镇社区卫生服务中心招聘1人考前自测高频考点模拟试题及1套完整答案详解
- 江西省科学技术馆面向社会公开招聘劳务派遣制工作人员考试模拟试题及答案解析
- 2021年烟花爆竹经营单位主要负责人和安全管理人员机考题库
- 浙江省安装工程预算定额说明及计算规则
- 房屋建筑学民用建筑构造概论
- 蓝点网络分账解决方案
- GB/T 24186-2022工程机械用高强度耐磨钢板和钢带
- GB/T 22315-2008金属材料弹性模量和泊松比试验方法
- 《新媒体概论(第三版)》课件第5章
- 旅游饭店服务技能大赛客房服务比赛规则和评分标准
- DBJ50-112-2016 现浇混凝土桥梁梁柱式模板支撑架安全技术规范
- 城市轨道交通运营管理毕业论文题目
- DB22T 5036-2020 建设工程项目招标投标活动程序标准
评论
0/150
提交评论