Play源碼深刻之一:從play命令開始

Play的命令是藉助python腳本,這從下載的play包就能明顯看出來:一是其中有一個python包,裏面是一個play自帶的python環境,還有是play.bat文件:java

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

使用python運行play文件,而play文件裏就是python代碼。也就是咱們平時用的play命令全做用於其中。用python來操做java項目管理是比較好的方法,我參與的兩個大項目都是如此。python

咱們一塊兒來看看python是如何操控java滴。 play文件中引入了commandLoader/application/utils等文件,他們位於/framework/pym下:shell

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

首先看看commandLoader,其主要做用是加載command文件下全部模塊、命令等。 app

在command文件夾中包含了在命令行中使用的全部命令,如:eclipse.py中,就是包含了eclipsify與ec,後者是前者的簡化。對play項目進行了導入優化。其餘如intellij.py/netbeans.py/ant.py三個文件都如此。eclipse

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方法。 rest

一個play start demo 流程: cmd輸入 -> play文件中 -> daemon.py -> appliction.py -> javacode

相關文章
相關標籤/搜索