java 启动 jetty_关于 jetty 启动

本文介绍了一种使用Maven和Jetty打包部署Java项目的方案,不同于传统jar包,它创建了一个包含配置文件、启动脚本和依赖库的结构。打包后生成的tar.gz文件解压后,通过预设的shell脚本可以启动项目。文章还提到了启动代码的实现,并提及可以进一步优化,比如避免使用web.xml配置文件。
摘要由CSDN通过智能技术生成

要说的是, 鄙人所说的方案和这篇文章 http://www.jfinal.com/share/422  没有多大关系, 只是看到这个文章之后, 分享下我这边的方案, 不是说更好的方案, 此方法是我之前自己项目中想要用 jetty 打包部署, 图方便, 这种方式, 提供一种不一样的参考.

方法和该文章所说的方式略有不同, 这里打包出来的结构并不是一个独立的 jar 包.

打包完成后的结构如下:/--

/conf

/bin

/lib

conf 放置配置文件信息, bin 存放启动脚本 lib 存放 jar 包依赖 包括项目本身.

具体方式:

pom.xml<?xml  version="1.0" encoding="UTF-8"?>

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">

com.example

test

1.0

jar

test

test

UTF-8

UTF-8

${project.basedir}

UTF-8

1.8

3.1

9.4.6.v20170531

org.eclipse.jetty

jetty-server

${version-jetty}

org.eclipse.jetty

jetty-webapp

${version-jetty}

com.jfinal

jfinal

${version-jfinal}

cglib

cglib-nodep

${basedir}/src/main/resources

true

${basedir}/src/main/resources

org.apache.maven.plugins

maven-compiler-plugin

${version-java}

${version-java}

org.apache.maven.plugins

maven-source-plugin

true

attach-sources

verify

jar-no-fork

org.apache.maven.plugins

maven-jar-plugin

**/*.class

${project.artifactId}-${project.version}

org.apache.maven.plugins

maven-assembly-plugin

create-archive

package

single

gnu

false

false

${project.name}

false

src/main/assembly/pkg.xml

${project.build.directory}/dist/

org.apache.maven.plugins

maven-resources-plugin

org.apache.maven.shared

maven-filtering

1.3

是的, 用到了 assembly 插件, 来进行依赖包移动. 在 src/main 目录新增 assembly且创建 pkg.xml 文件.

pkg.xml<?xml  version="1.0" encoding="UTF-8"?>

dist

dir

tar.gz

${project.name}

true

${project.basedir}

/

README.md

${project.basedir}/src/main/resources

*

/conf

true

${project.basedir}/src/main/webapp

/conf/webapp

${project.basedir}/src/main/bin

*

/bin

0755

${project.basedir}/target

test*.jar

/lib

/lib

这样, 整个配置就完成了, 执行 mvn package 指令进行打包, 就能得到一个 tar.gz的包, 解压后执行 /bin 目录中预先写好的 shell 脚本启动项目.

至于启动的代码怎么写, 这个就很简单了

Boot.javapackage com.example.test.core;

/**

* Created by iaceob on 2017/7/25.

*/

public class LightSowBoot {

private void init() throws LightSowException {

Boolean debug = PropKit.getBoolean("test.debug");

int model = ConfKit.getInt("test.model", 0);

if (model == 0)

throw new RuntimeException("未知的运作模式");

}

private String findWebdir() {

// 调试模式不自动寻找 webdir 地址, 直接在配置文件写死就好

if (PropKit.getBoolean("test.debug"))

return PropKit.get("test.webdir.debug");

// 正常模式下, 通过环境变量去寻找名称是 /webapp 的地址, web.xml 文件便放在这里面

try {

Enumeration urls = Thread.currentThread().getContextClassLoader().getResources("");

while (urls.hasMoreElements()) {

URL url = urls.nextElement();

if (!url.getPath().endsWith("/webapp/"))

continue;

File file = new File(url.getPath());

if (!file.isDirectory())

continue;

return url.getPath();

}

return null;

} catch (IOException e) {

throw new RuntimeException("Can not find webapp.");

}

}

public void boot() {

PropKit.use("cfg.properties");

try {

this.init();

} catch (RuntimeException e) {

log.error(e.getMessage(), e);

}

int port = PropKit.getInt("test.srv.port");

try {

Server server = new Server(port);

WebAppContext ctx = new WebAppContext();

String webdir = findWebdir();

ctx.setResourceBase(webdir);

ctx.setDescriptor(String.format("%s/WEB-INF/web.xml", webdir));

ctx.setContextPath("/");

ctx.setParentLoaderPriority(true);

ctx.setConfigurations(new Configuration[]{

new WebXmlConfiguration(),

new WebInfConfiguration(),

// new TagLibConfiguration(),

new MetaInfConfiguration(),

new FragmentConfiguration(),

new JettyWebXmlConfiguration()

});

log.info("Server listen {}", port);

server.setHandler(ctx);

server.start();

server.join();

} catch (InterruptedException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

}

到这里就结束了, web.xml 的内容就不用我贴了吧.

最后, 打包, 解压后的目录结构应该像这样.

|-conf

|   |-webapp

|         |-web.xml

|-bin

|   |-boot.sh

|-lib

|-a.jar

|-b.jar

题外话, 关于这个使用 jetty 的启动方式, 其实还可以继续玩下去, 达到不需要写 web.xml 配置文件, 只需要在进行一次封装即可, 重写 JfinalConfig 提供一个启动方法, 继承 Config 后写 main 方法调用即可.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值