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