1

有没有办法创建一个包含整个 Java EE Web 应用程序的安装程序,而最终用户只需执行一个安装程序,而无需安装整个生产环境?

我正在尝试做的是为他们保存JDK + Tomcat的安装,如果您有更好的解决方案,请提供。

4

4 回答 4

3

对于 Windows 环境,您可以按如下方式创建安装程序,您可以通过为 linux 环境创建 shell 脚本来进行准备。

1、打包s/w的二进制发行版(例如postgresql、jetty、jre等...)

2、把你的war文件放到jetty webapps

3、在postgres里面创建data文件夹

4、设置各种环境变量并使用批处理文件进行初始化。就我而言,我创建了以下“install.bat”文件。

REM set jdk environment
PATH=%~dp0Java\jre6\bin;%~dp0Java\jre6\lib;%~dp0pgsql\bin;%PATH%
setx PATH "%PATH%"

REM set postgres environment
SETX PGDATA "%~dp0pgsql\data"
SETX PGDATABASE postgres
SETX PGUSER postgres
SETX PGPORT 5432
SETX PGLOCALEDIR "%~dp0pgsql\share\locale"

REM initdb initialize the postgresql initialization properties
"%~dp0pgsql\bin\initdb" -D "%~dp0pgsql\data" -U postgres -A trust

REM put the temp.vbs script into startup
cscript //NoLogo //B "%~dp0start_startup_shortcut.vbs"
cscript //NoLogo //B "%~dp0start_desktop_shortcut.vbs"
cscript //NoLogo //B "%~dp0app_shortcut.vbs"
REM start the database service
"%~dp0pgsql\bin\pg_ctl" -D "%~dp0pgsql\data" start

timeout /T 10

"%~dp0pgsql\bin\createdb.exe" -U postgres dbName
"%~dp0pgsql\bin\psql.exe" -U postgres -d dbName -f "%~dp0backup.sql"

REM java -DSTART="%~dp0jetty8\start.ini" -jar "%~dp0jetty8\start.jar"

REM start the jetty server
java -Djetty.home="%~dp0jetty8" -jar "%~dp0jetty8\start.jar" > pb_log.txt


pause

5、创建批处理文件启动服务。例如“start.bat”

REM start the database service

"%~dp0pgsql\bin\pg_ctl" -D "%~dp0pgsql\data" start

java -Djetty.home="%~dp0jetty8" -jar "%~dp0jetty8\start.jar"

6、您可以按如下方式创建应用程序快捷方式。例如“app_shortcut.vbs”

Dim FileName
FileName = "projectName"

Set wsShell= CreateObject("WScript.Shell")

Set wshSysEnv = wsShell.Environment("PROCESS")

sMyHomePath = wshSysEnv("HOMEPATH")

Set shortcut =
wsShell.CreateShortcut(CreateObject("WScript.Shell").SpecialFolders("Desktop")& + "\" + 
FileName + ".lnk")

shortcut.Description = "Start projectName"

currentDirectory = left(WScript.ScriptFullName,
(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))

shortcut.TargetPath = currentDirectory + "projectName.bat"

shortcut.Arguments = "/Arguments:Shortcut"

shortcut.Save

7、启动服务桌面快捷方式如下:

Dim FileName
FileName = "Start projectName Server"

Set wsShell= CreateObject("WScript.Shell")

Set wshSysEnv = wsShell.Environment("PROCESS")

sMyHomePath = wshSysEnv("HOMEPATH")

Set shortcut = 
wsShell.CreateShortcut(CreateObject("WScript.Shell").SpecialFolders("Desktop")& + "\" + 
FileName + ".lnk")

shortcut.Description = "Start projectName"

currentDirectory = left(WScript.ScriptFullName,
(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))

shortcut.TargetPath = currentDirectory + "start.bat"

shortcut.Arguments = "/Arguments:Shortcut"

shortcut.Save

8、运行应用程序批处理文件

@echo off
netstat -o -n -a | findstr 0.0:9095
if %ERRORLEVEL% equ 0 (start http://localhost:9095) ELSE (echo "Please Start the Server"
pause)
于 2012-11-19T13:28:16.330 回答
1

更简单的方法是使用您需要的所有文件(Tomcat 和 JDK)创建一个压缩文件。解压缩文件后,这可以运行命令来启动 Tomcat 或您需要的东西。有必要考虑到 Tomcat 和 JDK的路径与原始环境中的相同

我看到Winrar可以生成可执行文件,并且可以在提取结束时运行命令。(您在安装新程序时看到过这种情况吗?首先解压缩,然后安装。)至少在 Windows 中是这样。其他库或程序可能会生成类似 Winrar 的内容。

于 2012-05-04T22:57:14.663 回答
1

虽然单个安装程序可能看起来很方便,但在许多用例中可能会开始出现问题:

  • 当必须升级 Tomcat、JDK 或其他一些组件以解决安全问题时。最终用户使用单独的安装程序更容易做到这一点,您不必使用更新的位创建新的安装程序
  • 某些用户可能希望在与您捆绑的应用服务器不同的应用服务器上运行您的应用程序
  • 如果每个应用程序都这样做,用户最终会为每个应用程序安装一个 JDK + 一个容器安装

由于 JVM 安装和 Tomcat 安装都很简单,我建议您在发布您的应用时附上一些漂亮、清晰的安装说明,而不是作为一个单独的包。YMMV。

于 2012-05-05T09:08:13.020 回答
0

如果您的 Web 应用程序只是一个 WAR 文件并且您可以使用任何 servlet 2.4 容器,那么请考虑将其嵌入 Winstone 容器中:

http://winstone.sourceforge.net/#embedding

您现在已将问题简化为一个可执行的 JAR,其中存在大量安装程序。选择哪一种要视实际情况而定。

于 2012-05-04T22:19:09.430 回答