Browse Source

undertow部署问题

龚成明 2 năm trước cách đây
mục cha
commit
fcb113a309
4 tập tin đã thay đổi với 356 bổ sung117 xóa
  1. 69 0
      jfinal.bat
  2. 82 0
      jfinal.sh
  3. 67 0
      package.xml
  4. 138 117
      pom.xml

+ 69 - 0
jfinal.bat

@@ -0,0 +1,69 @@
+@echo off
+
+rem -------------------------------------------------------------------------
+rem
+rem 使用说明:
+rem
+rem 1: 该脚本用于别的项目时只需要修改 MAIN_CLASS 即可运行
+rem
+rem 2: JAVA_OPTS 可通过 -D 传入 undertow.port 与 undertow.host 这类参数覆盖
+rem    配置文件中的相同值此外还有 undertow.resourcePath, undertow.ioThreads
+rem    undertow.workerThreads 共五个参数可通过 -D 进行传入
+rem
+rem 3: JAVA_OPTS 可传入标准的 java 命令行参数,例如 -Xms256m -Xmx1024m 这类常用参数
+rem
+rem
+rem -------------------------------------------------------------------------
+
+setlocal & pushd
+
+
+rem 启动入口类,该脚本文件用于别的项目时要改这里
+set MAIN_CLASS=common.jfinal.AppConfig
+
+rem Java 命令行参数,根据需要开启下面的配置,改成自己需要的,注意等号前后不能有空格
+rem set "JAVA_OPTS=-Xms256m -Xmx1024m -Dundertow.port=80 -Dundertow.host=0.0.0.0"
+rem set "JAVA_OPTS=-Dundertow.port=80 -Dundertow.host=0.0.0.0"
+
+
+if "%1"=="start" goto normal
+if "%1"=="stop" goto normal
+if "%1"=="restart" goto normal
+
+goto error
+
+
+:error
+echo Usage: jfinal.bat start | stop | restart
+goto :eof
+
+
+:normal
+if "%1"=="start" goto start
+if "%1"=="stop" goto stop
+if "%1"=="restart" goto restart
+goto :eof
+
+
+:start
+set APP_BASE_PATH=%~dp0
+set CP=%APP_BASE_PATH%config;%APP_BASE_PATH%lib\*
+echo starting jfinal undertow
+java -Xverify:none %JAVA_OPTS% -cp %CP% %MAIN_CLASS%
+goto :eof
+
+
+:stop
+set "PATH=%JAVA_HOME%\bin;%PATH%"
+echo stopping jfinal undertow
+for /f "tokens=1" %%i in ('jps -l ^| find "%MAIN_CLASS%"') do ( taskkill /F /PID %%i )
+goto :eof
+
+
+:restart
+call :stop
+call :start
+goto :eof
+
+endlocal & popd
+pause

+ 82 - 0
jfinal.sh

@@ -0,0 +1,82 @@
+#!/bin/bash
+# ----------------------------------------------------------------------
+# name:         jfinal.sh
+# version:      1.0
+# author:       yangfuhai
+# email:        fuhai999@gmail.com
+#
+# 使用说明:
+# 1: 该脚本使用前需要首先修改 MAIN_CLASS 值,使其指向实际的启动类
+#
+# 2:使用命令行 ./jfinal.sh start | stop | restart 可启动/关闭/重启项目  
+#
+# 3: JAVA_OPTS 可通过 -D 传入 undertow.port 与 undertow.host 这类参数覆盖
+#    配置文件中的相同值此外还有 undertow.resourcePath、undertow.ioThreads、
+#    undertow.workerThreads 共五个参数可通过 -D 进行传入,该功能尽可能减少了
+#    修改 undertow 配置文件的必要性
+#
+# 4: JAVA_OPTS 可传入标准的 java 命令行参数,例如 -Xms256m -Xmx1024m 这类常用参数
+#
+# 5: 函数 start() 给出了 4 种启动项目的命令行,根据注释中的提示自行选择合适的方式
+#
+# ----------------------------------------------------------------------
+
+# 启动入口类,该脚本文件用于别的项目时要改这里
+MAIN_CLASS=common.jfinal.AppConfig
+
+if [[ "$MAIN_CLASS" == "com.yourpackage.YourMainClass" ]]; then
+    echo "请先修改 MAIN_CLASS 的值为你自己项目启动Class,然后再执行此脚本。"
+	exit 0
+fi
+
+COMMAND="$1"
+
+if [[ "$COMMAND" != "start" ]] && [[ "$COMMAND" != "stop" ]] && [[ "$COMMAND" != "restart" ]]; then
+	echo "Usage: $0 start | stop | restart"
+	exit 0
+fi
+
+
+# Java 命令行参数,根据需要开启下面的配置,改成自己需要的,注意等号前后不能有空格
+# JAVA_OPTS="-Xms256m -Xmx1024m -Dundertow.port=80 -Dundertow.host=0.0.0.0"
+# JAVA_OPTS="-Dundertow.port=80 -Dundertow.host=0.0.0.0"
+
+# 生成 class path 值
+APP_BASE_PATH=$(cd `dirname $0`; pwd)
+CP=${APP_BASE_PATH}/config:${APP_BASE_PATH}/lib/*
+
+function start()
+{
+    # 运行为后台进程,并在控制台输出信息
+    # java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} &
+
+    # 运行为后台进程,并且不在控制台输出信息
+    # nohup java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} >/dev/null 2>&1 &
+
+    # 运行为后台进程,并且将信息输出到 output.log 文件
+    # nohup java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} > output.log &
+
+    # 运行为非后台进程,多用于开发阶段,快捷键 ctrl + c 可停止服务
+    java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS}
+}
+
+function stop()
+{
+    # 支持集群部署
+    kill `pgrep -f ${APP_BASE_PATH}` 2>/dev/null
+    
+    # kill 命令不使用 -9 参数时,会回调 onStop() 方法,确定不需要此回调建议使用 -9 参数
+    # kill `pgrep -f ${MAIN_CLASS}` 2>/dev/null
+
+    # 以下代码与上述代码等价
+    # kill $(pgrep -f ${MAIN_CLASS}) 2>/dev/null
+}
+
+if [[ "$COMMAND" == "start" ]]; then
+	start
+elif [[ "$COMMAND" == "stop" ]]; then
+    stop
+else
+    stop
+    start
+fi

+ 67 - 0
package.xml

@@ -0,0 +1,67 @@
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
+  <!--
+  assembly 打包配置更多配置可参考官司方文档:
+  http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
+  -->
+
+  <id>release</id>
+
+  <!--
+      设置打包格式,可同时设置多种格式,常用格式有:dir、zip、tar、tar.gz
+      dir 格式便于在本地测试打包结果
+      zip 格式便于 windows 系统下解压运行
+      tar、tar.gz 格式便于 linux 系统下解压运行
+  -->
+  <formats>
+    <format>dir</format>
+    <format>zip</format>
+    <!-- <format>tar.gz</format> -->
+  </formats>
+
+  <!-- 打 zip 设置为 true 会在包在存在总目录,打 dir 时设置为 false 少层目录 -->
+  <includeBaseDirectory>true</includeBaseDirectory>
+
+  <fileSets>
+    <!-- src/main/resources 全部 copy 到 config 目录下 -->
+    <fileSet>
+      <directory>${basedir}/src/main/resources</directory>
+      <outputDirectory>config</outputDirectory>
+    </fileSet>
+
+    <!-- src/main/webapp 全部 copy 到 webapp 目录下 -->
+    <fileSet>
+      <directory>${basedir}/src/main/webapp</directory>
+      <outputDirectory>webapp</outputDirectory>
+    </fileSet>
+
+    <!-- 项目根下面的脚本文件 copy 到根目录下 -->
+    <fileSet>
+      <directory>${basedir}</directory>
+      <outputDirectory>./</outputDirectory>
+      <!-- 脚本文件在 linux 下的权限设为 755,无需 chmod 可直接运行 -->
+      <fileMode>755</fileMode>
+      <includes>
+        <include>*.sh</include>
+      </includes>
+    </fileSet>
+    
+    <fileSet>
+      <directory>${basedir}</directory>
+      <outputDirectory>./</outputDirectory>
+      <fileMode>755</fileMode>
+      <lineEnding>windows</lineEnding>
+      <includes>
+        <include>*.bat</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+
+  <!-- 依赖的 jar 包 copy 到 lib 目录下 -->
+  <dependencySets>
+    <dependencySet>
+      <outputDirectory>lib</outputDirectory>
+    </dependencySet>
+  </dependencySets>
+</assembly>

+ 138 - 117
pom.xml

@@ -2,134 +2,155 @@
 
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+  <modelVersion>4.0.0</modelVersion>
 
-    <groupId>org.example</groupId>
-    <artifactId>ethereum_viewer_interface</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <packaging>war</packaging>
+  <groupId>org.example</groupId>
+  <artifactId>ethereum_viewer_interface</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
 
-    <name>ethereum viewer interface</name>
-    <url>http://www.example.com</url>
+  <name>ethereum viewer interface</name>
+  <url>http://www.example.com</url>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <maven.compiler.source>1.7</maven.compiler.source>
-        <maven.compiler.target>1.7</maven.compiler.target>
-    </properties>
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
 
-    <dependencies>
-        <dependency>
-            <groupId>com.jfinal</groupId>
-            <artifactId>jfinal-undertow</artifactId>
-            <version>2.2</version>
-        </dependency>
+  <dependencies>
+    <dependency>
+      <groupId>com.jfinal</groupId>
+      <artifactId>jfinal-undertow</artifactId>
+      <version>2.2</version>
+    </dependency>
 
-        <dependency>
-            <groupId>com.jfinal</groupId>
-            <artifactId>jfinal</artifactId>
-            <version>5.0.5</version>
-        </dependency>
+    <dependency>
+      <groupId>com.jfinal</groupId>
+      <artifactId>jfinal</artifactId>
+      <version>5.0.5</version>
+    </dependency>
 
-        <!--mysql驱动包-->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>8.0.12</version>
-        </dependency>
+    <!--mysql驱动包-->
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+      <version>8.0.12</version>
+    </dependency>
 
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>druid</artifactId>
-            <version>1.1.6</version>
-        </dependency>
+    <dependency>
+      <groupId>com.alibaba</groupId>
+      <artifactId>druid</artifactId>
+      <version>1.1.6</version>
+    </dependency>
 
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>1.2.28</version>
-        </dependency>
+    <dependency>
+      <groupId>com.alibaba</groupId>
+      <artifactId>fastjson</artifactId>
+      <version>1.2.28</version>
+    </dependency>
 
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-            <version>1.0.0.GA</version>
-        </dependency>
-    </dependencies>
+    <dependency>
+      <groupId>javax.validation</groupId>
+      <artifactId>validation-api</artifactId>
+      <version>1.0.0.GA</version>
+    </dependency>
+  </dependencies>
 
-    <build>
-        <finalName>ethereum_viewer_interface</finalName>
+  <build>
+    <finalName>ethereum_viewer_interface</finalName>
 
-        <!--
-		    添加 includes 配置后,excludes 默认为所有文件 **/*.*,反之亦然
-		    该规则在 maven-jar-plugin 等插件中同样适用
-		-->
-        <resources>
-            <!-- 添加该配置是为了将 .sql 文件打入 jar 包 -->
-            <resource>
-                <!-- 注意 IDEA maven 多模块下必须要使用 ${project.basedir}/ 前缀  -->
-                <directory>${project.basedir}/src/main/java</directory>
-                <includes>
-                    <!-- **/* 前缀用法,可以匹配所有路径 -->
-                    <include>**/*.sql</include>
-                    <include>**/*.sqlt</include>
-                    <include>**/*.jf</include>
-                </includes>
-            </resource>
+    <!--
+    添加 includes 配置后,excludes 默认为所有文件 **/*.*,反之亦然
+    该规则在 maven-jar-plugin 等插件中同样适用
+-->
+    <resources>
+      <!-- 添加该配置是为了将 .sql 文件打入 jar 包 -->
+      <resource>
+        <!-- 注意 IDEA maven 多模块下必须要使用 ${project.basedir}/ 前缀  -->
+        <directory>${project.basedir}/src/main/java</directory>
+        <includes>
+          <!-- **/* 前缀用法,可以匹配所有路径 -->
+          <include>**/*.sql</include>
+          <include>**/*.sqlt</include>
+          <include>**/*.jf</include>
+        </includes>
+      </resource>
 
-            <!--
-                没有添加 resources 配置时,src/main/resources 目录是默认配置
-                一旦添加 resources 配置指向 src/main/java 目录时,原先的默认配置被取代,
-                所以需要添加如下配置将默认配置再添加进来,否则无法使用 src/main/resources
-                下的资源文件
-            -->
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-            </resource>
-        </resources>
+      <!--
+          没有添加 resources 配置时,src/main/resources 目录是默认配置
+          一旦添加 resources 配置指向 src/main/java 目录时,原先的默认配置被取代,
+          所以需要添加如下配置将默认配置再添加进来,否则无法使用 src/main/resources
+          下的资源文件
+      -->
+      <resource>
+        <directory>${project.basedir}/src/main/resources</directory>
+      </resource>
+    </resources>
 
-        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
-            <plugins>
-                <plugin>
-                    <artifactId>maven-clean-plugin</artifactId>
-                    <version>3.1.0</version>
-                </plugin>
-                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
-                <plugin>
-                    <artifactId>maven-resources-plugin</artifactId>
-                    <version>3.0.2</version>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.8.0</version>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <version>2.22.1</version>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-war-plugin</artifactId>
-                    <version>3.2.2</version>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-install-plugin</artifactId>
-                    <version>2.5.2</version>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-deploy-plugin</artifactId>
-                    <version>2.8.2</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>8</source>
-                    <target>8</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
+    <!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.6.1</version>
+        <configuration>
+          <source>1.8</source>
+          <target>1.8</target>
+          <encoding>UTF-8</encoding>
+          <!-- java8 保留参数名编译参数 -->
+          <compilerArgument>-parameters</compilerArgument>
+          <compilerArguments><verbose /></compilerArguments>
+        </configuration>
+      </plugin>
+      
+      <!--
+          jar 包中的配置文件优先级高于 config 目录下的 "同名文件"
+          因此,打包时需要排除掉 jar 包中来自 src/main/resources 目录的
+          配置文件,否则部署时 config 目录中的同名配置文件不会生效
+      -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <version>2.6</version>
+        <configuration>
+          <excludes>
+            <exclude>*.txt</exclude>
+            <exclude>*.xml</exclude>
+            <exclude>*.properties</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+      
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>3.1.0</version>
+        <executions>
+          <execution>
+            <id>make-assembly</id>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+
+            <configuration>
+              <!-- 打包生成的文件名 -->
+              <finalName>${project.artifactId}</finalName>
+              <!-- jar 等压缩文件在被打包进入 zip、tar.gz 时是否压缩,设置为 false 可加快打包速度 -->
+              <recompressZippedFiles>false</recompressZippedFiles>
+              <!-- 打包生成的文件是否要追加 release.xml 中定义的 id 值 -->
+              <appendAssemblyId>true</appendAssemblyId>
+              <!-- 指向打包描述文件 package.xml -->
+              <descriptors>
+                <descriptor>package.xml</descriptor>
+              </descriptors>
+              <!-- 打包结果输出的基础目录 -->
+              <outputDirectory>${project.build.directory}/</outputDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
 </project>