在linux伺服器上使用Java代碼調用linux或maven命令

來源:互聯網
上載者:User

標籤:失敗   http   process   run   訪問   bin   val   有一個   com   

背景:

項目需求,只要在頁面上貼上maven依賴的地址,就能直接下載依賴

例如

<dependency>    <groupId>com.avides.springboot.testcontainer</groupId>    <artifactId>springboot-testcontainer-common</artifactId>    <version>0.1.0-RC6</version></dependency>

貼上這個,項目就能直接去下載maven的依賴

做法:

需要用到linux上的maven命令(根據實踐,在windows上也可以使用這條命令)

注意:需要先安裝maven,並且配置環境變數,有可能配置中的倉庫地址要與命令中的一致

mvn dependency:get -DremoteRepositories=http://repo1.maven.org/maven2/ -DgroupId=junit -DartifactId=junit -Dversion=4.8.2

 

java具體寫法

public Process exec(String[] cmdArray);// Linux下Runtime.getRuntime().exec(new String[]{"/bin/sh","-c","cmds"}).waitFor();// Windows下Runtime.getRuntime().exec(new String[]{"cmd","/c",cmds}).waitFor();

Process的幾種方法

1、destroy():殺掉子進程

2、exitValue():返回子進程的出口值,值0表示正常終止

3、getErrorStream():擷取子進程的錯誤流

4、getInputStream():擷取子進程的輸入資料流

5、getOutputStream():擷取子進程的輸出資料流

6、waitFor():導致當前線程等待,如有必要,一直要等到由該Process對象表示的進程已經終止。如果已終止該子進程,此方法立即返回。如果沒有終止該子進程,調用的線程將被阻塞,知道退出子進程,根據管理,0表示正常終止。

注意:在Java中,調用runtime線程執行指令碼是非常消耗資源的,所以切記不要頻繁使用!

在調用runtime去執行指令碼的時候,其實就是JVM開了一個子線程去調用JVM所在系統的命令,其中開了三個通道:輸入資料流、輸出資料流、錯誤流,其中輸出資料流就是子線程走調用的通道。

大家都知道,waitFor是等待子線程執行命令結束後才訪問,但是在runtime中,開啟程式的命令如果不關閉,就不運算元線程結束,比如如下代碼。

注意:

經實踐,如果linux命令在linux伺服器上執行失敗,比如說not found command,也算是執行了,代碼也是會繼續往下走的。所以要確保命令的正確性,或者使用傳回值來判斷!調用waitFor()的返回和不調用的傳回值,類型都是不同的。

 

這樣的下載方法只能把依賴下載到本地maven配置的倉庫,如果有其他的需求,比如說我此次項目的需求就是掃描另一個路徑下的facade包是否存在,那麼在我下載完依賴之後,還有一個操作就是複製一份同樣的jar包到另一個路徑下。在複製的過程中需要注意的就是maven的目錄結構,要保證每次的拼接都是正確的。

另外在操作過程中還出現一個小問題,使用secureCRT登陸linux伺服器,必須先執行source .bashrc命令,然後再在這個視窗啟動項目,這樣子才能正確執行java代碼中所輸出的linux命令,必須要同一個視窗!請各位參考一下。

 

在linux伺服器上使用Java代碼調用linux或maven命令

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.