當前位置:首頁 » 編程軟體 » maven命令編譯

maven命令編譯

發布時間: 2023-07-08 14:33:13

Ⅰ mvn dependency:tree 命令需要先編譯

需要。
電腦的指令都是需要先編輯好,要不然就沒辦法執行,在項目開發過程中,我們經常會有分析項目依賴的需要,查找jar依賴路徑,查找jar沖突等等。這時候,dependency命令會非常的有用。
Maven常用命令有:mvn-version:查看maven的版本及配置信息。mvncompile:編譯項目代碼。mvnpackage:打包項目。mvntest:運行單元測試。mvnclean:清除編譯產生的target文件夾內容。mvninstall:將項目生成jar包放在倉庫中。

Ⅱ maven工程編譯並生成可執行JAR包命令

你需要什麼的命令???
一般的是 call 你的maven的地址/mvn clean install
當然 也有其他的情況 比如節點的不同 需要改變命令 不知道 你要的節點是什麼。。。

Ⅲ 怎麼編譯運行從github上下載下來的maven項目源碼(我想調試運行的是sonarqube的源碼)跪求大神orz

maven 編譯命令
從別處拷貝來的maven項目,有時候會出現不能debug關聯的情況,即按住ctrl鍵後不能跳轉到相應的類或方法,這是需要eclipse環境生成 Eclipse 項目文件的。

可以在cmd命令窗口下進入到maven項目包含pom.xml文件的目錄下,運行 mvn eclipse:eclipse 命令即可,如果還不行,可使用mvn compile :編譯源代碼 命令。

--------------------------------------------------------------------------------------------------------------------------------
下面是一些maven的常用命令:

Maven2 的運行命令為 : mvn ,
常用命令為 :
mvn archetype:create :創建 Maven 項目
mvn compile :編譯源代碼
mvn test-compile :編譯測試代碼
mvn test : 運行應用程序中的單元測試
mvn site : 生成項目相關信息的網站
mvn clean :清除目標目錄中的生成結果
mvn package : 依據項目生成 jar 文件
mvn install :在本地 Repository 中安裝 jar
mvn eclipse:eclipse :生成 Eclipse 項目文件
生成項目
建一個 java 項目 : mvn archetype:create -DgroupId=com.demo -DartifactId=App
建一個 web 項目 : mvn archetype:create -DgroupId=com.demo -DartifactId=web-app -DarchetypeArtifactId=maven-archetype-webapp

生成 Eclipse 項目
普通 Eclipse 項目執行 : mvn eclipse:eclipse
Eclipse WTP 項目執行 : mvn eclipse:eclipse –Dwtpversion=1.0

更詳細的,自己網路搜索 maven 編譯,學習一下吧

Ⅳ idea編譯和maven編譯的區別

個人的一個小感受,學習一個新技術,應該以歷史的眼光開看待這個新技術出現的原因,以及幫我們解決了什麼問題。在個人職業生涯中要感謝Java自學網,一直自學java,我們來回憶一下沒有Maven的日子是怎麼樣的?

開發一個項目,需要用別人寫好的jar包,我們先把開源的jar包下載下來放到項目的lib目錄下,並把這個目錄添加到CLASSPATH(告訴Java執行環境,在哪些目錄下可以找到你要執行的Java程序需要的類或者包)
我們下載了a.jar發現a.jar還需要依賴b.jar,結果又去把b.jar包下載下來開始運行
如果運氣夠好,我們的項目在添加完所有的依賴後,能正產運行了。如果運氣差點,還會遇到版本的問題,例如a.jar在調用b.jar的時候發現b.jar根本沒有這個方法,在別的版本中才有,現在好了,光找依賴和適配版本就能花上不少時間
而且我們往git上上傳代碼的時候,還必須把這些lib都上傳上去。別人下載我們的代碼時也必須把lib下載下來,這個真心耗費時間
這時候Maven作為Java世界的包管理工具出現了,當然Java世界還有其他包管理工具,例如gradle等。就像yum是linux世界的包管理工具,webpack是前端世界的包管理工具一樣

Maven倉庫的種類

.png
Maven找jar包的過程是這樣的,先在本地倉庫找,找不到再去私服(如果配置了的話),再找不到去中央倉庫(http://repo1.maven.org/maven2/,maven團隊負責維護)

從中央倉庫找到後,會在私服和本地倉庫放一份,從私服找到後也會在本地倉庫放一份

當你安裝在好了Maven以後,在conf目錄下有個settings.xml文件,這個裡面配置的項很多,後文會詳細介紹這個配置文件。

在這個配置文件下有這樣一段話,說了Maven默認的本地倉庫地址為${user.home}/.m2/repository(當然你可以重新設置本地倉庫的地址,上面就是模板),我是window電腦,來看看這個目錄

.png
看到有很多jar包被存到本地,當然如果你想配置私服也是在settings.xml上進行配置,隨便一搜很多教程,不再贅述

搭建私服好處多多,在一個公司內部可以開發一些公共的基礎組件放到私服上,方便其他同事使用

Maven的默認配置

一個Maven的項目的整體結構是這樣的

.png
在這里插入圖片描述

為什麼一個Maven項目的文件結構是這種的呢?

這就不得不說到Maven的一個特性,約定優於配置。

Maven默認配置了${project.basedir}/src/main/java為項目的源代碼目錄

${project.basedir}/src/main/test為項目的測試代碼目錄

${project.basedir}/target為項目的編譯輸出目錄等

spring boot就是約定優於配置的體現,想想我們用spring mvc的時候還得配置視圖解析器,包的自動掃描,而用了spring boot框架,我們就完全不用再配置了

Maven項目詳解

安裝還是挺簡單的,我就不再介紹,我也沒有單獨下載,一般就用了Idea自帶的Maven了,下載完後目錄結構如下:

.png
bin目錄:

該目錄包含了mvn運行的腳本,這些腳本用來配置java命令,准備好classpath和相關的Java系統屬性,然後執行Java命令。

boot目錄:

該目錄只包含一個文件,該文件為plexus-classworlds-2.5.2.jar。plexus-classworlds是一個類載入器框架,相對於默認的java類載入器,它提供了更加豐富的語法以方便配置,Maven使用該框架載入自己的類庫。

conf目錄:

該目錄包含了一個非常重要的文件settings.xml。直接修改該文件,就能在機器上全局地定製maven的行為,即對所有用戶都生效。一般情況下,我們更偏向於復制該文件至~/.m2/目錄下(~表示用戶家目錄,windows下~就是C:UsersPeng,Peng是小編的用戶名),然後修改該文件,在用戶級別定製Maven的行為。

lib目錄:

該目錄包含了所有Maven運行時需要的Java類庫,Maven本身是分模塊開發的,因此用戶能看到諸如maven-core-3.0.jar、maven-model-3.0.jar之類的文件,此外這里還包含一些Maven用到的第三方依賴如commons-cli-1.2.jar、commons-lang-2.6.jar等等。、

settings.xml配置文件詳解

我們來詳細說一下settings.xml這個文件,這個文件可以定製Maven的行為,上面已經說到settings.xml可以放在2個位置,~/.m2/setting.xml(默認沒有,需要我們自己復制)和${maven.home}/conf/setting.xml

這2個配置文件的載入順序為~/.m2/setting.xml>${maven.home}/conf/setting.xml,為了不影響他人,所以我們將conf下的settings.xml復制到家目錄,在用戶級別定製Maven的行為。

.png
這個和配置環境變數有點類似,Windos和Linux都可以配置系統級別的環境變數和用戶級別的環境變數,這里單說一下Linux的吧,在/etc/profile裡面配置的就是系統級別的環境變數,在~/.bash_profile裡面配置的就是用戶級別的環境變數

各種配置項還是挺多的,設置鏡像倉庫(國內用阿里雲的比較多),設置代理,不再贅述

maven常用命令

.png
當然也可以連著使用

mvn clean package 清理打包

mvn clean package -DskipTests=true 清理打包,並跳過測試用例

mvn clean install 清理打包,並將jar包或者war包復制到本地倉庫

運行單測的時候也沒必要一個一個點測試方法,mvn test 一個命令跑完所有測試用例,

要注意的是只會執行以Test開頭或者結尾的測試類,也沒必要自己寫測試類,我在推薦閱讀第一篇文章中演示了快速生成測試類的方法,可以去看看,生成的測試類都是以Test結尾的

mvn dependency:tree > show.txt 將依賴輸出重定向到文件中,方便查看

pom.xml詳解

groupId 公司域名倒過來

artifactId 功能命名

version 版本號

這三個維度確定一個jar包,就像用(x,y,z)坐標在三維空間中唯一確定一個點。

packaging 打包方式,jar,war,maven-plugin(開發maven插件)

scope詳解

參數解釋是否會被打入最終的jar包compile默認的scope是test測試使用否provided編譯需要否runtime編譯不需要,運行時需要(介面與實現分離)是system載入本地jar否

類似如下這種,沒有指定scope,說明scope是compile

org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2
test是指在運行測試用例的時候才會用到,沒必要打入到最後的jar裡面,所以你看到的測試框架的scope基本上都是test

org.springframework.boot spring-boot-starter-test test
provided,編譯的時候會用到,但不會被打入最後的jar包

例如想把spring boot項目以war包的形式放在tomcat中運行,首先得加入如下依賴

org.springframework.boot spring-boot-starter-tomcat provided
或者你寫了一個放在Storm集群或者Flink集群上運行的任務,最後都要把Storm的依賴或者Flink的依賴設置成provided,因為集群上已經都有這些環境的jar包、

如果你用到lombok插件的話,你會發現lombok的Maven是如下形式,說明它只會編譯的時候會用到。

org.projectlombok lombok 1.16.6provided
我寫了如下一個測試類

@Datapublic class Test { private String name; private int age;}
生成的class文件反編譯後的如下,驗證了我們的想法,編譯之後確實沒有必要再用lombok這個jar包

public class Test { private String name; private int age; public Test() { } public String getName() { return this.name; } public int getAge() { return this.age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; }}
runtime,運行時才會用到。例如,如果你的項目有對資料庫的操作,但沒有加入相應的JDBC的實現jar包,如mysql-connector-java,是可以編譯成功的,只有運行時才會報錯。所以你看到的JDBC實現的jar包scope為runtime,表明這個jar包在運行時才會用到

mysql mysql-connector-java 5.1.35runtime
system,本地載入jar,當你和第三方公司合作,他們只是給了你一個jar包時,你可以有三種選擇

mvn install到本地倉庫
mvn deploy到私服
指定jar包路徑,從本地載入,例如如下pom形式
com.tievd.third arcvideo 1.0system${basedir}/lib/face-api-1.0.jar
前文已經說到scope為system的依賴不會被打入最終的jar包,得通過配置插件等方式將依賴打入最終的jar包,所以這種方式一般很少使用。

還沒寫完,後續更精彩

寫在最後:

碼字不易看到最後了,那就點個關注唄,只收藏不點關注的都是在耍流氓!

關注並私信我「架構」,免費送一些Java架構資料(也可到Java自學網直接獲取),先到先得!記得轉發哦!

打開CSDN,閱讀體驗更佳
最新發布 【分享】idea版本與maven版本不一致的坑
在確保maven 相關的配置沒有問題的時候,可以考慮下,是否是idea與maven版本配置問題。比如 idea 2022,使用maven3.6.x 有點小問題,推薦版本3.8.x。idea 2021 使用高版本3.8.x 有點小問題,推薦版本3.6.x。
繼續訪問
記Maven命令打包到本地庫*.pom文件打包不完整的解決思路
問題描述 1、需求描述 目前籌劃做一個開源的springboot項目,其想法是在這個開源項目中整合所有依賴的jar包。之後開發就直接新建個maven項目直接依賴這個包就可以直接進行開發了。 2、問題描述 當寫好基礎的jar包打包之後,mvn install 到本地倉庫,新建maven項目依賴此jar包,發現基礎jar包所依賴的所有jar都沒有引入進來。但是經過幾番測試發現一下規律: (1)、在idea中install 的jar包可以正常使用。 (2)、mvn install:instal..
繼續訪問
idea正常 jar包運行有問題_IDEA 直接點擊運行執行正常,命令行下面執行Jar包出現部分亂碼的情況。...
解決方案如上:有個Springboot項目為了測試方便,模型類用中文作為欄位屬性,封裝成Odata格式,在通過Springboot發布並打成jar包。通過命令行啟動jar包裡面的Springweb服務,訪問的時候開始進入服務http://desktop-6vf91n9:8080/exp.svc/ 中文欄位就亂碼,通過application.properties編碼,進入服務不亂碼了。http://...
繼續訪問
2.maven打包方式的不同
maven安裝命令: (1)打包snapshot和正式版本號是不一樣的,發布到私服中的命令也不一樣,不需要snapshot方式時,各個依賴包下都需要去除 (2)打包過程中可能會遇到的編碼錯誤,可能需要設置打包時的項目編碼 (3)spring.maven.plugin和maven.plugin的打包方式,後者會要求需要填入主類信息 (4)mvn -DskipTests -Drat.skip=...
繼續訪問
Maven依賴關系原則
轉載自: Maven依賴關系原則與沖突解決辦法(含必殺技) 筆者JustryDeng Maven依賴關系原則(概念): 相關概念: 級別: 我們不妨把pom.xml裡面的引用的依賴視為第一級,那麼依賴中各自引用的依賴視為第二級...第三級... 路徑長短: 我們不妨以從pom.xml出發,到抵達該依賴時經過的「級」的個數來作為路徑長短的標准。 最短路徑(不同級引用)原則: 若兩個版
繼續訪問
IDEA面板Build Project和maven compile、package、install、deploy的區別
前言: 基於springboot項目 IDEA面板Build下面的Project build和Maven compile、package、install、deploy比較 1、Build Project(Ctrl+F9) 編譯項目,生成位元組碼文件; 生成的target中有classes、generated-sources、generated-test-sources、test-classes目錄; 第一次點Build Project會編譯整個項目包括測試類,第二次點Build Proje
繼續訪問
idea中jar包明明存在,卻報jar包不存在異常的完整處理過程
java開發中遇到的各種問題處理方案
繼續訪問

idea web項目中out(maven中是target)目錄更新不同步,導致訪問404
今天碰到個很惡心的東西。。就是明明導入了相應的依賴文件(css,html,js等文件),路徑也正確。。就是訪問不了。。。。弄了一個多小時。。。 原因在哪?看了一下web項目的生成位置,發現編譯之後會重新生成一個out目錄,更新不同步。。。。 解決方法:build->Build Artifact->clean,然後再build->build Artifact->rebuild。。。問題解決。。 如果使用的是maven構建的web項目,就簡單很多直接cmd定位到項目根節點,有pom
繼續訪問

熱門推薦 筆記本win10相機打不開 無法啟動 顯示灰色相機 怎麼辦
問題筆記本相機打開只顯示一個灰色相機圖,不顯示畫面如圖:解決方案一筆記本會有一個相機的快捷鍵F8,直接按下F8或者Fn+F8即可解決問題。如圖:解決方案二打開win10設置→隱私→相機,查看允許訪問相機的許可權有沒有打開如圖:解決方案三下載相應品牌型號的設置Settings軟體,比如我的是聯想,下載安裝Lenovo Settings,開啟相機如圖:解決方案四Win+R打開命令端,輸入regedit運...
繼續訪問
IDEA build報錯,顯示程序包不存在而maven compile無問題
1 問題描述 抽風症狀一:打開項目之後外部引用的包都飄紅,必須點擊maven的reimport才可以洗白 抽風症狀二:點擊IDEA上方的錘子build失敗,顯示各種程序包不存在,而託管maven compile無問題 IDEA版本:2020.1 2 嘗試 terminal中鍵入mvn idea:idea 無效 在搜羅了網上的各種解決方案之後,可以確定的是出現這個狀況的IDEA版本都是2020.1 3 問題定位 原因:IDEA的Build(編譯)操作和Maven的Build是分開的,並不是一回事。 我之前
繼續訪問

maven依賴的jar包版本不一樣_系統優化(一)Maven打包同一個jar有不同的:版本+時間戳(解決思路)...
解決:maven倉庫的ear裡面有很多個相同的jar(只是包含不同的:版本+時間戳)問題描述: 發現ear裡面有很多個相同的jar,只是包含不同的:版本+時間戳,如下圖所示:(例如:itoo-basic-api有很多相同的jar,只是包含不同的:版本+時間戳)解決思路用許可權的itoo-authority-usergroup-ear模塊進行測試1.懷疑是:maven的坐標,時間戳的問題關鍵字:mav...
繼續訪問
maven本地打包環境不一致
maven本地打包安裝提示No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? 這是mvn的jre環境和jdk下的jre環境不一致,修改環境變數配置和idea的maven使用的jre環境後還是不生效,直接修改maven安裝目錄下的bin文件夾中的mvn.cmd文件,在第一行加上以下代碼解決問題。 set JAVA_HOME=C:\Program Files\Java\
繼續訪問
IDEA 編譯 .jar (可能涉及問題)
IDEA 在執行以下操作前需要確認: 包內class文件沒有語法錯誤,項目SDK和SDK版本號保持一致,main method 和 main path 的設定 以上確認存在問題將導致編譯不通過,解決方法如下: 打開方式為:File----->Project Structure----->Project 對項目進行編譯首先在File----->Project Structure----->Project目錄下點開Artifacts 這邊需要添加項目,可選擇從當前編輯頁尋找 按
繼續訪問

IntelliJ打包與Maven命令打包的區別
因為經常會遇到這個問題,兩種打包方式打出來的包不一樣,一般情況是IntelliJ包可能會報錯,而使用Maven命令行打出來的包就可以正常使用。具體的區別還沒去找,暫時寫在這兒,後面再補充 ...
繼續訪問
使用maven給jar包生成對應的pom文件
參考: https://blog.csdn.net/qq_31289187/article/details/81117478 1. 背景 公司不允許使用外網進行安卓開發,所以在內網里無法連接google和jcenter的庫,也無法使用阿里雲的國內鏡像。所以只能使用本地文件,進行項目的構建,但是在項目構建的過程中,會報如下錯誤。 Could not find androidx.databinding:databinding-compiler:4.0.1. Search in the follo.
繼續訪問
maven依賴的jar包版本不一樣_Maven依賴jar包沖突常見的解決方法
項目中,經常會遇到ClassNotFound,NoSuchMethod異常,第一反應往往是類路徑不對,jar沒有正確的引用。第一步判斷jar是否載入,還是 載入的jar由於maven依賴管理存在傳遞依賴,造成依賴的jar版本號不對,相應的類找不到,或者是相應類版本不對,沒有對應的方法。一 造成jar 沖突的原因:如果項目中存在對同一jar不同版本依賴的時候,maven 2根據最近原則,默認引用最靠...
繼續訪問
intelliJ導出的jar包運行效果和ide運行效果不一致
寫在開頭,文章還是要自己寫,不管是有多爛。 如果連一篇本該是作為職業生涯技術點滴記錄的博客都造假,那人生未免太可悲。 好一些的作者,轉載文章後,掛上轉載標簽,再附上自己的感想。只要感想是自己的,感想寫得內容多了,掛個原創也不為過。寫清楚哪些是自己的,哪些是別人的,就行了。 但現在呢,在當下,好多人都想做網紅,都想要聚合流量,然後自媒體流量變現。然後,就是一堆亂七八糟往上點,就為了你能關注下他發的...
繼續訪問
maven打包pom文件在windows和linux下的格式差異
org.apache.maven.plugins maven-compiler-plugin 3.1 ${java.version} ${java.version} UTF-8 true --> ${java.home}/lib/rt.jar${delimiter}${java.home}/lib/jce.jar ${delimiter} 這個分隔符,在Wi
繼續訪問
maven在eclipse編譯和在CMD編譯結果不一致
maven配置文件默認使用的是setting.xml文件 在CMD環境下也是默認使用setting文件 而在eclipse環境下編譯則使用的是eclipse配置的setting文件, 因此,會出現在eclipse編譯和在CMD編譯結果不一致的問題 轉載於:https://www.cnblogs.com/fanrenren/p/11346276.html...
繼續訪問
maven工程pom.xml配置引用的jar包和最終打出war包中的jar包版本號不一致——mvn命令的應用
今天在打包一個maven工程時,發現有個jar包(暫且叫它A.jar),在pom.xml中配置的明明是2.3的版本,打出的war包里的A.jar怎麼都是1.0的版本,導致war包部署不起來。為此掙扎了1個多小時,pom依賴檢查和環境檢查。最後終於想到可以利用maven的mvn命令列印出jar包依賴關系才發現原來是工程里引用的另一個jar(叫它B.jar好了)也依賴了A.jar,而B.jar中A,j
繼續訪問

Ⅳ 使用maven編譯JAVA程序是出錯

問題描述:
在eclipse中build一個普通maven項目,報錯,提示信息是缺少maven插件(插件名稱忘了)。

原因:
可能是由於使用了eclipse自帶的jre導致的,這個jre里沒有tools.jar,而jdk的lib目錄下有(個人理解)。

解決辦法:
1、檢查eclipse的配置,確保使用的不是eclipse自帶的版本。
步驟:在eclipse中打開Window->Preferences->Java->Installed JREs->Add,添加自己下載並配置好的jdk(別忘了配置環境變數),我用的是jdk1.6.0_4.3。


2、然後再次編譯maven項目,仍然報錯,但提示信息改變了,提示的是C:\Users\Administrator.EED4VRFALFPIIBP\.m2\repository\commons-logging\commons-logging下的jar包解析失敗;
3、解決方案:刪除repository文件夾,確保網路暢通,重啟eclipse,執行Maven->Project
Update,問題解決。

注意:如果你的eclipse中配置了tomcat,那麼你也需要重新選擇tomcat的jdk版本,確保與前面的一致。

步驟:在eclipse中打開Window->Preferences->Server->Runtime
Environment->選中你的tomcat server->Edit,在JRE這項里選擇你的jdk,完成。

Ⅵ 用maven編譯項目時出現如下問題

在/etc/profile配置java的環境變數: 你的mvn 項目是用哪個版本的jdk.,就要配置那個版本的jdk。

強制保存文件命令:w !sudo tee %

此時在進入項目執行:$ git pull origin master

繼續mvn clean install

Ⅶ 如何用maven將java8寫的代碼編譯為java6平台的

在一般的Java應用開發過程中,開發人員使用Java的方式比較簡單。打開慣用的IDE,編寫Java源代碼,再利用IDE提供的功能直接運行Java 程序就可以了。這種開發模式背後的過程是:開發人員編寫的是Java源代碼文件(.java),IDE會負責調用Java的編譯器把Java源代碼編譯成平台無關的位元組代碼(byte code),以類文件的形式保存在磁碟上(.class)。Java虛擬機(JVM)會負責把Java位元組代碼載入並執行。Java通過這種方式來實現其「編寫一次,到處運行(Write once, run anywhere)」 的目標。Java類文件中包含的位元組代碼可以被不同平台上的JVM所使用。Java位元組代碼不僅可以以文件形式存在於磁碟上,也可以通過網路方式來下載,還可以只存在於內存中。JVM中的類載入器會負責從包含位元組代碼的位元組數組(byte[])中定義出Java類。在某些情況下,可能會需要動態的生成 Java位元組代碼,或是對已有的Java位元組代碼進行修改。這個時候就需要用到本文中將要介紹的相關技術。首先介紹一下如何動態編譯Java源文件。
動態編譯Java源文件
在一般情況下,開發人員都是在程序運行之前就編寫完成了全部的Java源代碼並且成功編譯。對有些應用來說,Java源代碼的內容在運行時刻才能確定。這個時候就需要動態編譯源代碼來生成Java位元組代碼,再由JVM來載入執行。典型的場景是很多演算法競賽的在線評測系統(如PKU JudgeOnline),允許用戶上傳Java代碼,由系統在後台編譯、運行並進行判定。在動態編譯Java源文件時,使用的做法是直接在程序中調用Java編譯器。
JSR 199引入了Java編譯器API。如果使用JDK 6的話,可以通過此API來動態編譯Java代碼。比如下面的代碼用來動態編譯最簡單的Hello World類。該Java類的代碼是保存在一個字元串中的。
01 public class CompilerTest {
02 public static void main(String[] args) throws Exception {
03 String source = "public class Main { public static void main(String[] args) {System.out.println(\"Hello World!\");} }";
04 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
05 StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
06 StringSourceJavaObject sourceObject = newCompilerTest.StringSourceJavaObject("Main", source);
07 Iterable< extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);
08 CompilationTask task = compiler.getTask(null, fileManager, null,null, null, fileObjects);
09 boolean result = task.call();
10 if (result) {
11 System.out.println("編譯成功。");
12 }
13 }
14
15 static class StringSourceJavaObject extends SimpleJavaFileObject {
16
17 private String content = null;
18 public StringSourceJavaObject(String name, String content) ??throwsURISyntaxException {
19 super(URI.create("string:///" + name.replace('.','/') + Kind.SOURCE.extension), Kind.SOURCE);
20 this.content = content;
21 }
22
23 public CharSequence getCharContent(boolean ignoreEncodingErrors) ??throws IOException {
24 return content;
25 }
26 }
27 }
如果不能使用JDK 6提供的Java編譯器API的話,可以使用JDK中的工具類com.sun.tools.javac.Main,不過該工具類只能編譯存放在磁碟上的文件,類似於直接使用javac命令。
另外一個可用的工具是Eclipse JDT Core提供的編譯器。這是Eclipse Java開發環境使用的增量式Java編譯器,支持運行和調試有錯誤的代碼。該編譯器也可以單獨使用。Play框架在內部使用了JDT的編譯器來動態編譯Java源代碼。在開發模式下,Play框架會定期掃描項目中的Java源代碼文件,一旦發現有修改,會自動編譯 Java源代碼。因此在修改代碼之後,刷新頁面就可以看到變化。使用這些動態編譯的方式的時候,需要確保JDK中的tools.jar在應用的 CLASSPATH中。
下面介紹一個例子,是關於如何在Java裡面做四則運算,比如求出來(3+4)*7-10的值。一般的做法是分析輸入的運算表達式,自己來模擬計算過程。考慮到括弧的存在和運算符的優先順序等問題,這樣的計算過程會比較復雜,而且容易出錯。另外一種做法是可以用JSR 223引入的腳本語言支持,直接把輸入的表達式當做JavaScript或是JavaFX腳本來執行,得到結果。下面的代碼使用的做法是動態生成Java源代碼並編譯,接著載入Java類來執行並獲取結果。這種做法完全使用Java來實現。
01 private static double calculate(String expr) throws CalculationException {
02 String className = "CalculatorMain";
03 String methodName = "calculate";
04 String source = "public class " + className
05 + " { public static double " + methodName + "() { return " + expr +"; } }";
06 //省略動態編譯Java源代碼的相關代碼,參見上一節
07 boolean result = task.call();
08 if (result) {
09 ClassLoader loader = Calculator.class.getClassLoader();
10 try {
11 Class<?> clazz = loader.loadClass(className);
12 Method method = clazz.getMethod(methodName, new Class<?>[] {});
13 Object value = method.invoke(null, new Object[] {});
14 return (Double) value;
15 } catch (Exception e) {
16 throw new CalculationException("內部錯誤。");
17 }
18 } else {
19 throw new CalculationException("錯誤的表達式。");
20 }
21 }
上面的代碼給出了使用動態生成的Java位元組代碼的基本模式,即通過類載入器來載入位元組代碼,創建Java類的對象的實例,再通過Java反射API來調用對象中的方法。
Java位元組代碼增強
Java 位元組代碼增強指的是在Java位元組代碼生成之後,對其進行修改,增強其功能。這種做法相當於對應用程序的二進制文件進行修改。在很多Java框架中都可以見到這種實現方式。Java位元組代碼增強通常與Java源文件中的註解(annotation)一塊使用。註解在Java源代碼中聲明了需要增強的行為及相關的元數據,由框架在運行時刻完成對位元組代碼的增強。Java位元組代碼增強應用的場景比較多,一般都集中在減少冗餘代碼和對開發人員屏蔽底層的實現細節上。用過JavaBeans的人可能對其中那些必須添加的getter/setter方法感到很繁瑣,並且難以維護。而通過位元組代碼增強,開發人員只需要聲明Bean中的屬性即可,getter/setter方法可以通過修改位元組代碼來自動添加。用過JPA的人,在調試程序的時候,會發現實體類中被添加了一些額外的 域和方法。這些域和方法是在運行時刻由JPA的實現動態添加的。位元組代碼增強在面向方面編程(AOP)的一些實現中也有使用。

Ⅷ windows maven命令行 命令怎麼使用

下載maven,下載後如果是壓縮包,進行解壓,得到maven目錄。

找到我們的maven目錄並復制路徑,右鍵計算機,屬性里選擇高級系統設置,找到環境變數。

用戶變數下選擇新建,變數名為M2_HOME,變數值為D:\Program Files\apache-maven-3.1.0,點擊確定

找到maven下的bin目錄D:\Program Files\apache-maven-3.1.0\bin復制,用戶變數下選中PATH點擊編輯,粘貼,注意加分號跟其它的隔開。

這就算配置完成,驗證對不對,win+R快捷鍵cmd進入dos窗口,輸入命令,mvn -v(注意中間有個空格),回車運行後可以看見maven版本maven home表示安裝成功。

進入或者新建想要生成項目的文件夾,通過運行dos命令mvn archetype:generate,可以簡單搭建一個maven項目的骨架。運行過程中會讓我們輸入groupId,artifactId,package,也可以直接設置這些,例如:mvn archetype:generate -DgroupId=com.xh.maven -DartifactId=maven_03 -Dversion=0.0.1_SNAPSHOT

如果我們寫好了一個項目,dos命令下可以通過mvn compile編譯項目src/main/java下中的類

如果編譯的結果顯示有ERROR,怎麼查看ERROR的詳細信息呢,可以通過mvn -e,從本例這個提示看,就是pom.xml上第一行xml後面編碼encoding拼寫錯誤

mvn項目是src下有個main,還有個test測試,mvn -test就是編譯src/test/java中的類

mvn package 打包
mvn install 會把打的jar包發到倉庫中,這樣另一個項目中pom.xml下通過dependency下配置就可調用裡面的類

Ⅸ 如何用Java代碼執行maven編譯

我的思路:在windows環境下,用Java調用CMD進入待操作的項目目錄下,然後執行mvn compile。或者執行bat批處理文件,用bat執行maven命令。

熱點內容
紅帆oa伺服器地址查詢 發布:2025-02-07 14:31:41 瀏覽:655
文本框腳本圖片 發布:2025-02-07 14:23:28 瀏覽:228
少兒編程c語言 發布:2025-02-07 14:22:50 瀏覽:216
一階低通濾波器c語言 發布:2025-02-07 14:22:37 瀏覽:849
電腦的東西為什麼粘貼不到伺服器 發布:2025-02-07 14:21:04 瀏覽:195
手機脫模解壓視頻 發布:2025-02-07 14:20:18 瀏覽:472
密碼多少密碼多少密碼多少密碼 發布:2025-02-07 14:07:30 瀏覽:856
我的世界啟動器電腦伺服器 發布:2025-02-07 14:07:27 瀏覽:483
愛加密深圳科技有限 發布:2025-02-07 14:07:26 瀏覽:86
c語言密碼星號 發布:2025-02-07 14:07:24 瀏覽:800