無法配置 tomcat 7 使用自己的 JDK
我在配置tomcat 7以在 Windows 上作為服務執行時遇到以下問題。
更具體地說,tomcat 是安裝在我們客戶伺服器上的 Web 應用程序的一部分,它必須在其中包含所有依賴項。
在這種情況下,tomcat 依賴於 Java JDK/JRE,所以我下載了一個帶有 jre 的獨立 jdk(版本 1.7u21)並將其放在 tomcat 文件夾中。
所以現在我的目錄樹是這樣的:
tomcat7 - bin - conf - jdk - jre - logs - temp - webapps - work
然後我繼續使用命令將其安裝為服務
tomcat\bin\service.bat install
並且在
jvm
模式下安裝沒有問題。請注意,我修改了 service.bat 文件,以便正確設置所有需要的變數,即 CATALINA_HOME、CATALINA_BASE、JAVA_HOME 和 JRE_HOME,最後兩個指向內部 jdk/jre。
但是,如果我嘗試啟動該服務,我會收到一條錯誤消息,指出它無法啟動該服務並引用錯誤程式碼 1。
查看tomcat日誌,它說:
[2013-05-22 12:22:09] [info] [ 5392] Commons Daemon procrun (1.0.15.0 32-bit) started [2013-05-22 12:22:10] [info] [ 5392] Running 'AGEws2Tomcat7' Service... [2013-05-22 12:22:10] [info] [ 2764] Starting service... [2013-05-22 12:22:10] [error] [ 2764] %1 is not a valid Win32 application. [2013-05-22 12:22:10] [error] [ 2764] Failed creating java C:\AGEws\tomcat7\jdk\jre\bin\server\jvm.dll [2013-05-22 12:22:10] [error] [ 2764] %1 is not a valid Win32 application. [2013-05-22 12:22:10] [error] [ 2764] ServiceStart returned 1 [2013-05-22 12:22:11] [error] [ 2764] %1 is not a valid Win32 application. [2013-05-22 12:22:11] [info] [ 5392] Run service finished. [2013-05-22 12:22:11] [info] [ 5392] Commons Daemon procrun finished
我試著用Google搜尋一下這個部分
Failed creating java
,我發現了一些關於.dll
文件可能依賴的資訊,我發現了這些資訊,但我不明白我應該把它放在哪裡,如果這確實是問題。我還嘗試以
java
模式安裝服務,它可以工作,但使用我電腦自己的 JVM 而不是內部的,而我需要它來使用內部的。為了讓tomcat
jvm
使用自己的jdk/jre在模式下作為服務正常工作,我可以/必須做什麼?請注意,我們的 web 應用程序曾經與 tomcat 5 一起發布,它在
jvm
mode 下執行良好。
最後我發現解決方案是將啟動和停止模式設置為
java
同時提供一個明確的 JAVA_HOME 選項--JavaHome /path/to/internal/jdk
進行修改後,服務工作正常,即使在
java
模式而不是jvm
舊服務的模式下也是如此。
為了澄清 Matteo 的答案(並幫助不太熟悉 Java 世界的 Windows 人員),我們在 64 位 Windows Server 2012(非 R2)上使用 Tomcat 8 時遇到了完全相同的問題。我們正在使用/配置 IBM Rational DOORS Help 9.6.1——儘管我們在嘗試在相對現代的 64 位 Windows 上進行配置時已經在大多數 IBM Java/Tomcat 風格的產品中看到了這一點。
我們必須使用以下內容更新位於 Tomcat 安裝目錄中的 service.bat 文件:
--StartMode java ^ --StopMode java ^ --JavaHome "C:\Program Files (x86)\Java\jre7" ^
啟動/停止選項從 ‘jvm’ 更改,JavaHome 選項是配置文件的新增內容。然後通過以下方式安裝服務:
service.bat install <service name>
在我們的例子中,服務名稱是 DOORS_Help。我們有一個 64 位 Tomcat 安裝和一個 32 位 JRE 安裝,它們顯然可以一起工作——這是供應商提供的。
編輯:另一個選項似乎是在安裝 Tomcat**之前手動設置 JRE_HOME 和 JAVA_HOME 環境變數。**否則,您將需要重新安裝 Windows 服務。我知道這種與原始文章相矛盾,但似乎並非所有 Tomcat 安裝都是一樣的!