日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2023/12/3 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在没有IDE的情况下编译和运行Java 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近一個名為“ 不使用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 。 下一個屏幕快照顯示了此結果。

因為我們沒有為.class文件指定目標目錄,所以默認情況下將它們與編譯它們的源.java文件放在同一目錄中。 我們可以使用-d選項糾正這種情況。 我們的命令現在可以運行,例如,作為javac -sourcepath src -d classes src\dustin\examples\*.java 。 如前所述,指定的目標目錄( classes )必須已經存在。 完成后,該命令會將.class文件放置在指定目錄中,如下一個屏幕快照所示。

將Java源文件編譯為指定目錄中的相應.class文件后,我們現在可以使用Java應用程序啟動器命令行工具java運行該應用程序。 只需按照java -help或java工具頁面上顯示的說明并使用-classpath (或-cp )選項指定.class文件的位置即可完成。 在下一個屏幕快照中演示了使用這兩種方法指定classes目錄是在其中查找.class文件的位置。 最后一個參數是具有要執行的main功能的類的標準名稱(整個Java程序包)。 在下一個屏幕快照中演示的命令是java -cp classes dustin.examples.Main和java -classpath classes dustin.examples.Main 。

使用Ant構建并運行

對于最簡單的Java應用程序,使用javac和java分別構建和執行該應用程序非常簡單,如剛剛演示的那樣。 隨著應用程序的參與度提高(例如,多個包/目錄中存在的代碼或第三方庫和框架上更復雜的類路徑依賴關系),這種方法可能變得笨拙。 Apache Ant是Java構建工具“三巨頭 ”中最古老的一種,已在數千個應用程序和部署中使用。 正如我在上一篇博客文章中討論的那樣 ,很容易創建一個非常基本的Ant構建文件,尤其是如果該文件以我在該文章中概述的模板開頭。

下一個代碼清單是針對Ant build.xml文件的,該文件可用于將.java文件編譯為.class文件,然后運行dustin.examples.Main類,就像上面對javac和java所做的一樣。

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”),以使該示例盡可能簡單,并使其與使用javac和java的上一個示例接近。 還要注意,我為javac Ant任務包括了將“ debug”設置為“ true”的原因,因為在Ant的默認設置中它不是true,而在javac的默認值中是true。 毫不奇怪,Ant的javac任務和java任務與命令工具javac和java非常相似。

因為我使用了Ant在未明確指定構建文件時會使用的默認名稱( build.xml ),并且因為我為該構建文件提供了“運行”目標作為“默認”,并且因為我將“編譯”作為依賴項而包括在內要運行“運行”目標,并且由于Ant在我環境的路徑上,因此我需要在命令行上執行以使Ant編譯并運行該示例的所有操作是在帶有build.xml文件的目錄中鍵入“ ant”。 下一個屏幕快照對此進行了演示。

盡管我演示了如何使用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文件,如下一個屏幕快照所示。

我還可以使用命令mvn exec:java -Dexec.mainClass=dustin.examples.Main使用Maven運行編譯后的應用程序,這將在下一個屏幕快照中演示。

與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”,這將在下一個屏幕快照中演示。

即使是最大的懷疑論者也不得不承認,對于這個簡單的示例,Gradle的構建非常巧妙。 它結合了依賴某些約定和假設的簡潔性,以及根據需要覆蓋選擇默認值的非常簡單的機制。 它使用Groovy而不是XML的事實也非常吸引人!

與Ant和Maven一樣,我傾向于僅使用這些工具進行構建,通常通常直接使用java或調用java的腳本來運行已編譯的.class文件。 順便說一句,我通常也將這些.class存檔到運行中的JAR中,但這超出了本文的范圍。

結論

IDE通常對于構建簡單的應用程序和示例不是必需的,甚至可能比最簡單的示例值得擁有更多的開銷。 在這種情況下,直接應用javac和java來構建和運行示例相當容易。 隨著示例變得越來越復雜,諸如Ant,Maven或Gradle之類的構建工具變得越來越有吸引力。 許多IDE支持這些構建工具的事實意味著,如果在簡單應用程序發展成為一個成熟的項目時確定需要IDE支持,則開發人員可以使用在過程中較早創建的構建工具來過渡到IDE。

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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的在没有IDE的情况下编译和运行Java的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。