導航:首頁 > 源碼編譯 > 熱部署熱編譯

熱部署熱編譯

發布時間:2023-05-21 17:46:03

A. idea jrebel怎麼熱部署

1.建立好Web項目
2. 將src\main目錄下的webapp復制到project目錄下(和src同級),改名為WebRoot.
2.進行設置File - Project Structure
(1) 設置Project compiler output 路徑
(2) 設置moles的代碼編譯輸出目錄. 點擊moles 設置右側 use mole compile output path
都是設置為project\WebRoot\WEB-INF\classes
點擊Apply,
注意: Exclude Output Paths 這個勾選的話,WEB-INF目錄下的classes目錄在IDEA裡面就會被隱藏起來.同時在旁邊Sources選項卡中,可以通過Exclude Folders設置要在IDEA中隱藏的目錄,比如WebRoot目錄
(3) 指定Web.xml和WebRoot的路徑. 點擊web,分別指定
Web Mole deployment descriptor 路徑為 project\WebRoot\WEB-INF\web.xml
和 Web Resource Directory的路徑 為 project\WebRoot
點擊Apply.

(4) 設置Artifacts 選中exploded 設置Output directory的路徑

B. 熱部署的釋義

所謂熱部署,就是在應用正在運行的時候升級軟體,卻不需要重新啟動應用。
對於java應用程序來說,熱部署就是在運行時更野返新Java類文件。在基於Java的應用伺服器實現熱部署的過程中,類裝入器扮演著重要的角色。大多數基於Java的應用伺服器,包括EJB伺服器和Servlet容器,都支持熱部署。類裝入器不能重新裝入一個已經裝入的類,但只要使用一個新的類裝入器實例,就可以將類再次裝入一個正在運行的應用程序。
Tomcat的熱部署
Tomcat的熱部署(以後就不用重啟了)
沒有熱部署和有熱部署的開發效率是天差地別的。這個問題還受很多第三方軟體包(Struts,Spring,Hibernate)的限制。本來可以熱部署,加入了第三方的包就不可以了。所以,先說明詳細的軟體環境,和程序配置是非常必要的。
虛擬機:java version 1.5.0_06
Servlet Engine:Apache Tomcat/5.0.27
Eclipse:3.0.1
Myeclipse:3.8.3
應用程序情況:純正的servlet+jsp+javabean,資料庫連接使用JDBC-ODBC橋連接Access資料庫。沒有使用任何第三方軟體包,沒有使用Struts,Spring,Hibernate。WebRootWEB-INFlib下是空的。
配置方法:
ie登陸http://Tomcat所在的伺服器IP:8080/ -> 點超連接「Tomcat Administration」-> 輸入用戶名密碼登陸 ->在左側的功能樹中 -> Tomcat Server -> Service(Catalina) -> Host(localhost) -> Context(/要修改如氏的web項目) ->右側新出現的頁面中 ->Reloadable設置為true -> Save按鈕 -> Commit Changes。
然後Tomcat日誌顯示:
debugging -- changes saved to conf/server.xml
- Removing web application at context path /test
- Processing Context configuration file URL file:D:Program FilesTomcat 5.0confCatalinalocalhost est.xml
- Removing web application at context path /admin
- unregistering logger Catalina:type=Logger,path=/admin,host=localhost
- Processing Context configuration file URL file:D:Program FilesTomcat 5.0confCatalinalocalhostadmin.xml
- Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true
- Initializing, config='org.apache.struts.action.ActionResources', returnNull=true
- Initializing, config='org.apache.webapp.admin.ApplicationResources', returnNull=true
- Removing web application at context path /webdav
- Processing Context configuration file URL file:D:Program FilesTomcat 5.0confCatalinalocalhostwebdav.xml
- Removing web application at context path /test
- Processing Context configuration file URL file:D:Program FilesTomcat 5.0confCatalinalocalhost est.xml
……
這樣,設置就生效了。頌橡飢
開發時,修改.java文件後,調用這個類時日誌提示:
- Reloading this Context has started
這是正在重新載入修改後的.class文件。
如果沒有進行這個設置,修改.java文件後,不拋出異常。系統使用沒有修改的.java文件繼續運行。
不同版本的Tomcat的配置方法是不同的。這里使用的是5.0.27
j2ee開發插件(這里使用Myeclipse),也可能導致熱部署失效。因為插件必須要把編譯好的.class文件從工作空間復制到Tomcatwebapps下的項目里。才能使Tomcat得到需要熱部署的文件。
注意:如果項目中加入了Struts,Hibernate,Spring之類的第三方軟體,可能導致熱部署失效。

C. gradle的jetty插件怎麼實現熱部署和debug模式

網上很多人誤解熱部署和熱載入的概念,所以造成亂配置的行為山坦,這里提示一下.
熱部署:就是容器狀態在運行的情況下部署或者重新部署整個項目.在這種情況下一般整個內存會清空,重新載入.簡單來說就是Tomcat或者其他的web伺服器會幫我們重新載入項目.這種方式可能會造成sessin丟失等情況.
熱載入:就是容器狀態在運行的情況下重新載入改變編譯後的類.在這種情況下內存不會清空,sessin不會丟失,但容易造成內存溢出,或者找不到方法。因為內存無法轉變成對像. 一般改變類的結構和模型就會有異常,在已經有的變數和方法中改變是不會出問題的。在中模式最好是在調試過程中使用,免得整個項目載入.
debug模式都支持熱載入.很方便使用.
IDEA TOMCAT WEB開發 SSH開發逗遲桐 修改類不重啟 熱部署 熱載入 IDEA8..
實可以用jreble+maven+tomcat進行熱部置的
1.在pom.xml中的 build 添加以下代碼:
<plugins>

<plugin>
<groupId>org.zeroturnaround</groupId>
<artifactId>javarebel-maven-plugin</artifactId>
<version>1.0.5</version>
<executions>
<execution>
<id>generate-rebel-xml</id>
<phase>process-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<path>/gt</path>
<port>80</port>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</旦高plugin>

</plugins>

2. Run As > Run Configurations > Maven Build > Main > Goals
中添加:tomcat:run

3. run

這樣就可以熱部置了

D. IntelliJ IDEA 怎麼熱部署,每次修改java文件就得重啟tomcat

確保使用的是debug模式。
確保tomcat是由idea實例化的。也就是說tomcat是在idea中配置好的
(特殊的修改如:項目配置文件,某些特殊類新增,方法名稱參數的添加修改引起的不能熱部署就必須重啟,當然你也可以用Jrebel插件。此插件收費。可以實現大部分的修改熱部署,包括修改項目配置文件等熱部署。以下描述均指的是普通的修改下的熱部署。)
項目配置如圖:

當修改文件後,ctrl+F9,編譯文件。tomcat會自動載入新文件。
On frame deactivation選項同樣可以選擇為 update classes and Resource選項。它的作用就是在你失去焦點的時候自動編譯。例如:修改某文件後你直接切換到了瀏覽器,或者點了下別的。只要當前的intellij idea 不是焦點就會激活自動編譯並更新文件動作。也就是說不用手動按ctrl+F9了。

所有以上操作,請確保是在DEBUG模式下操作。也就是運行tomcat的時候是debug模式啟動的。

E. 如何實現Eclipse熱部署

Tomcat比較輕快,非常適用於開發階段使用。一般我們看官方文檔指譽,會認為在server.xml中進行如下配置即可支持熱部署:

Java代碼
<Context path="/myApp" docBase="E:\workspace\myProject\web" reloadable="true"/>

但其實這樣配置後,修改java代碼會自動重啟Tomcat伺服器的,並非真正的熱部署。修改多個文件的話,需要多次保存,保存一次就重啟一次,非常之煩。

為了解決這個或逗岩問題,google了好多網頁,終於在某位大俠的博客(時間太久忘了原文地址了)里頭找到了答案,修改配置如下:

Java代碼
<Context path="/myApp" docBase="E:\workspace\myProject\web" reloadable="false" crossContext="true"/>

這樣修改java代碼,就不會自動重啟Tomcat,而且能及時生效了!
不過正如liuhanjun朋友評論中指出的,在追加方法或類變數時,衫御還是會提示重啟。

我的開發環境是eclipse3.7+Tomcat7.0.23,在eclipse里頭啟停的伺服器,Server location我選的是Use Tomcat Installation,Deploy path是webapp,Server Options下勾選了Serve moles without publishing。

F. 如何實現Eclipse熱部署

其實eclipse中的熱部署是通過設置應用伺服器來實現的,以tomcat為例來說明:
方法 一:
一些無關Classloader的類,主要是作為工具類引用的,可以放在tomcat的shared.loader下。這個可以通過設置catalina.properties目錄來實現。
但是此方法改變原有的類載入設計,可能工程需要做一些特別的改變。不具有普遍適應性。故略。

方法 二:
利用Tomcat配置的VirtualWebappLoader機制,告訴tomcat去載入第三方的其他jar文件咐念。配置方法同樣在server.xml文件里。在前面加的Context下添加Loader。如下:
<Context docBase="E:/code/workspace/SCM/WebRoot" path="/SCM" reloadable="false"> <Loader className="org.apache.catalina.loader.VirtualWebappLoader" searchVirtualFirst="false" virtualClasspath="E:/code/workspace/SimpleLibs/libs/*.jar"></Loader>
</Context>
注意:上面的配置衡辯困適用於Tomcat 7.X。在Tomcat 6.0設置灶山virtualClasspath時,需要列舉出具體的jar,即不能使用*.jar。

G. IDEA 2019配置SpringBoot實現熱部署

1)設置IDEA的自動編譯:

「File」→「Settings(Ctrl+Alt+S)」→「Build, Execution, Deplyment」→「Compiler」,選中「Build project automatically」 打勾

2)組合鍵 Shift+Ctrl+Alt+/,選擇 Registry ,找到compiler.automake.allow.when.app.running,選中打勾。

(或者CTRL + SHIFT + A --> 查找Registry)

設置游覽器禁用緩存:F12

至此配置完成,修改文件後不用重啟,刷新頁面即可看到效果

H. idea熱部署需要點一下

需要點一下。Idea 熱部署是指在開發階段,修改代碼後自動熱部署到 web 容器,實時查看代碼效果。Idea 支持多種容器,如 Tomcat、Jetty、Jboss 等。熱部署需要開啟,步驟如下:1. 在 Idea 中,選擇 File -> Settings -> Build, Execution, Deployment -> Compiler。2. 勾選勾選 Build project automatically。3. 點擊左側的 Build Tools 選項卡,選擇 Maven。再點擊右側勾選的項上的 Edit 按鈕。4. 應該會轎模跳轉到 Runner -- Maven 選項卡。勾選 On update action 選項卡目錄,選擇 Update classes and resources,點擊OK保存。這樣配置後,每當我們修改了代碼慧核後,Idea 會自動編閉碧緩譯項目,並將編譯後的文件部署到 Tomcat 等容器中,可以避免頻繁的手動部署,並且查看效果更為直觀和方便。

I. android 熱部署是什麼意思

在 Java 開發領域,熱部署一直是一個難以解決的問題,目前的 Java 虛擬機只能實現方法體的修改熱部署,對於整個類的結構修改,仍然需要重啟虛擬機,對類重新載入才能完成更新操作。對於某些大型的應用來說,每次的重啟都需要花費大量的時間成本。雖然 osgi 架構的出現,讓模塊重啟成為可能,但是如果模塊之間有調用關系的話,這樣的操作依然會讓應用出現短暫的功能性休克。本文將探索如何在不破壞 Java 虛擬機現有行為的前提下,實現某個單一類的熱部署,讓系統無需重啟就完成某個類的更新。

類載入的探索
首先談一下何為熱部署(hotswap),熱部署是在不重啟 Java 虛擬機的前提下,能自動偵測到 class 文件的變化,更新運行時 class 的行為。Java 類是通過 Java 虛擬機載入的,某個類的 class 文件在被 classloader 載入後,會生成對應的 Class 對象,之局差巧後就可以創建該類的實例。默認的虛擬機行為只會在啟動時載入類,如果後期有一個類需要更新的話,單純替換編譯的 class 文件,Java 虛擬機是不會更新正在運行的 class。如果要實現熱部署,最根本的方式是修改虛擬機的源代碼,改變 classloader 的載入行為,使虛擬機能監聽 class 文件的更新,重新載入 class 文件,這樣的行為破壞性很大,為後續的 JVM 升級埋下了一個大坑。
另一種友好的方法是創建自己的 classloader 來載入需要監聽的 class,這樣就能控制類載入的時機,從而實現熱部署。本文將具體探索如何實現這個方案。首先需要了解一下 Java 虛擬機現有的載入機制。目前的載入機制,稱為雙親委派,系統在使用一個 classloader 來載入類時,會先詢問當前 classloader 的父類是否有能力載入,如果父類無法實現載入操作,才會將任務下放到該 classloader 來載入。這種自上而下的載入方式的好處是,讓每個 classloader 執行自己的載入任務,不會重復載入類。但是這種方式卻使載入順序非常難改變,讓自定義 classloader 搶先載入需要監聽改變的類成為了一個難題。
不過我們可以換一個思路,雖然無法搶先載入該類,但是仍然可以用自定義 classloader 創建一個功能相同的類,讓每次實例化的對象都指向這個新的類。當這個類的 class 文件發生改變的時候,再次創建一個更新的類,之後如果系統再次發出實例化請求,創建的對象講指向這個全新的類。
下面來簡單列舉一下需要做的工作。
創建自定義的 classloader,載入需要監聽改變的類,在 class 文件發生改變的時候,重新載入該類。
改變創建對象的行為,使他們在創建時使用自定義 classloader 載入的 class。

自定義載入器的實現
自定義載入器仍然慶態需要執行類載入的功能。這里卻存在一個問題,同一個類載入器無法同時載入兩個相同名稱的類,由於不論類的結構如何發生變化,生成的類名不會變,而 classloader 只能在虛擬機停止前銷毀已經載入的類,這樣 classloader 就無法載入更新後的類了。這里有一個小技巧,讓每次載入的類都保存成一個帶有版本信息的 class,比如載入 Test.class 時,保存在內存中的類是 Test_v1.class,當類發生改變時,重新載入的類名是 Test_v2.class。但是真正執行載入 class 文件創建 class 的 defineClass 方法是一個 native 的方法,修改起來又變得很困難。所以面前還剩一條路,那就是直接修改編譯生成的 class 文件。
利用 ASM 修改 class 文件
可以修改位元組碼的框架有很多,比如 ASM,CGLIB。本文使用的是 ASM。先來介紹一下 class 文件的結構,class 文件包含了以下幾類信息,一個是類的基本信息,包含了訪問許可權信息,類名信息,父類信息,介面信息。第二個是類的變數信息。第三個是方法的信息。桐鍵ASM 會先載入一個 class 文件,然後嚴格順序讀取類的各項信息,用戶可以按照自己的意願定義增強組件修改這些信息,最後輸出成一個新的 class。
首先看一下如何利用 ASM 修改類信息。
清單 1. 利用 ASM 修改位元組碼
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
ClassReader cr = null;
String enhancedClassName = classSource.getEnhancedName();
try {
cr = new ClassReader(new FileInputStream(
classSource.getFile()));
} catch (IOException e) {
e.printStackTrace();
return null;
}
ClassVisitor cv = new EnhancedModifier(cw,
className.replace(".", "/"),
enhancedClassName.replace(".", "/"));
cr.accept(cv, 0);

閱讀全文

與熱部署熱編譯相關的資料

熱點內容
訪問日本伺服器可以做什麼 瀏覽:428
bytejava詳解 瀏覽:444
androidjava7 瀏覽:384
伺服器在山洞裡為什麼還有油 瀏覽:885
天天基金app在哪裡下載 瀏覽:972
伺服器軟路由怎麼做 瀏覽:289
冰箱壓縮機出口 瀏覽:225
OPT最佳頁面置換演算法 瀏覽:642
網盤忘記解壓碼怎麼辦 瀏覽:852
文件加密看不到裡面的內容 瀏覽:651
程序員腦子里都想什麼 瀏覽:431
oppp手機信任app在哪裡設置 瀏覽:185
java地址重定向 瀏覽:269
一年級下冊摘蘋果的演算法是怎樣的 瀏覽:448
程序員出軌電視劇 瀏覽:90
伺服器系統地址怎麼查 瀏覽:56
解壓游戲發行官 瀏覽:602
國外小伙解壓實驗 瀏覽:336
頂級大學開設加密貨幣 瀏覽:438
java重載與多態 瀏覽:528