文档章节

Play源码深入之一:从play命令开始

奋斗到天明
 奋斗到天明
发布于 2015/08/27 18:12
字数 541
阅读 204
收藏 0
点赞 1
评论 0

Play的命令是借助python脚本,这从下载的play包就能明显看出来:一是其中有一个python包,里面是一个play自带的python环境,还有是play.bat文件:

@echo off
"%~dp0python\python.exe" "%~dp0play" %*

使用python运行play文件,而play文件里就是python代码。也就是我们平时用的play命令全作用于其中。用python来操作java项目管理是比较好的方法,我参与的两个大项目都是如此。

我们一起来看看python是如何操控java滴。 play文件中引入了commandLoader/application/utils等文件,他们位于/framework/pym下:

from play.cmdloader import CommandLoader
from play.application import PlayApplication
from play.utils import *

首先看看commandLoader,其主要作用是加载command文件下所有模块、命令等。 

在command文件夹中包含了在命令行中使用的所有命令,如:eclipse.py中,就是包含了eclipsify与ec,后者是前者的简化。对play项目进行了导入优化。其他如intellij.py/netbeans.py/ant.py三个文件都如此。

import os, os.path
import shutil
import time

from play.utils import *

COMMANDS = ['eclipsify', 'ec']

HELP = {
'eclipsify': 'Create all Eclipse configuration files'
}

def execute(**kargs):
...

这里重要是daemon.py与base.py。 daemon.py中含有start/stop/restart三个关于应用开关的命令。在自己的项目中我们也可以借鉴他的实现方法。

COMMANDS = ['start', 'stop', 'restart', 'pid', 'out']

HELP = {
'start': 'Start the application in the background',
'stop': 'Stop the running application',
'restart': 'Restart the running application',
'pid': 'Show the PID of the running application',
'out': 'Follow logs/system.out file'
}

base.py中含有 run/new/clean/test等命令。

COMMANDS = ['run', 'new', 'clean', 'test', 'autotest', 'auto-test', 'id', 'new,run', 'clean,run', 'modules']

HELP = {
'id': "Define the framework ID",
'new': "Create a new application",
'clean': "Delete temporary files (including the bytecode cache)",
'run': "Run the application in the current shell",
'test': "Run the application in test mode in the current shell",
'auto-test': "Automatically run all application tests",
'modules': "Display the computed modules list"
}

utils.py中是能用辅助模块,从名称就可以看出来。像获取java版本、play版本、将项目打包成war等。 appliction.py是应用辅助模块,包括对应用文件、模块的检查、添加jar包等方法。其中也包含python操作java的java_cmd方法。 

一个play start demo 流程: cmd输入 -> play文件中 -> daemon.py -> appliction.py -> java

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
Play源码解析计划

最近有想法看看Play的源码,以提高自己的编码水平。之前都是东看看,西看看。最后看来去却好像无所大成。有人说过,伤敌十指,不如断敌一指,于是我有开始了学习之路。 原计划是采用1.2.3版本...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

Play 1.x框架学习之七:多数据库切换与源码修改 ( Databases Switch And Modify Source Code)

在单数据源(单个ip)下的多库,可以使用use xxdb 命令进行切换,但是如果多个数据源的情况下,use命令就不行了。在play框架中,提供了多数据源多库的切换。本文不提供完全的例子,只提供部分...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

Play源码深入之二:Play应用启动时框架的初始化

接着上篇在python的辅助下,理理输入启动命令之后,play框架进行的初始化工作。 application.py中的javacmd方法中就有play.server.Server。 def javacmd(self, javaargs, cp_args=None, clas...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

中英文对照 介绍Play Framework 框架 安装向导(Installation guide)

安装向导 h1. Installation guide 先决条件 h2. Prerequisites 想要运行Play框架,你需要Java 5或更高,如果你想从源码编译Play,你需要"Bazaar source control client":http://bazaar-vcs....

lyuehh ⋅ 2010/07/13 ⋅ 2

SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play

SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play 前言:本章内容梳理SRS接受到rtmp信息之后,如何转发出去。同样这里先做代码梳理,本人也在源码熟悉之中,可能很多网友朋友最关...

manageruser ⋅ 2017/07/07 ⋅ 0

在 IntelliJ IDEA 开发环境中集成 Play Framework 框架

在学习完 Play Framework 框架初学者入门 之后,接下来我们在 IntelliJ IDEA 中集成这个框架。 因为 Play 框架提供一些命令用来创建项目的模块,例如通过 play idealize app_name 命令来创建...

红薯 ⋅ 2010/07/06 ⋅ 1

Play 1.x框架学习之一:功能测试 (functional test in play framework)

Play框架中已经集成了junit框架,大家可以非常方便的进行功能测试,这里我展现一个测试新增的例子,其他的大家可以照这个例子深入。 首先需要在app/modules包中定义一个Beat类,app/control...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

Play源码深入之三:一次访问的前半生-请求

接着上篇,play初始化完成之后,第一个请求来到了PlayHandler中,我们看PlayHandler如何处理。 Netty调用play.server.PlayHandler:messageReceived()方法,play将netty的httprequest转化成自...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

【Play】热部署是如何工作的?

1.什么是热部署 所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时更新Java类文件。– 百度百科 对于Java应用,有三种常见的...

English0523 ⋅ 01/12 ⋅ 0

关于Play Framework生成的war包

一直在学习Play Framework,今天准备生成war包放到tomcat里面试试。用play war myapp -o e:myapp.war 生成war包,后发现war包里面是有源码的。有没有命令是生成war包里面不包含源码的呢?...

OTooo ⋅ 2010/08/16 ⋅ 6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部