2
2
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3
3
# Play! command line script
11
file="`cd \"$d\" 2>/dev/null && pwd`/$b"
12
if [ ! -f $file ]; then
13
echo "file not found $file"
21
CYGWIN*) CYGWIN=true;;
26
PLAY_BASE=`dirname "$PRG"`
31
echo "~ _ __ | | __ _ _ _| |"
32
echo "~ | '_ \\| |/ _' | || |_|"
33
echo "~ | __/|_|\\____|\\__ (_)"
36
echo "~ play! `cat "${PLAY_BASE}/framework/src/play/version"`
37
- web application framework by zenexity"
45
echo "~ Usage: play command [path] "
47
echo "~ with, new Create a new application"
48
echo "~ run Start the application in the current window"
49
echo "~ debug Start the application under JDPA debugger"
50
echo "~ start Start the application in background"
51
echo "~ stop Stop the application"
52
echo "~ help To show more commands"
7
# ~~~~~~~~~~~~~~~~~~~~~~Utilities
11
if [ -d "$1" ] ; then # Only a directory name.
14
elif [ -f "$1" ] ; then # Strip off and save the filename.
16
file="/"$(basename "$1")
18
echo "Error in absname ! ($1)"
19
# The file did not exist.
20
# Return null string as error.
24
# Change to the directory and display the absolute pathname.
28
cd "$oldDir" > /dev/null
32
# ~~~~~~~~~~~~~~~~~~~~~~ Display usage
35
echo "~ Usage: play command [path or current directory] "
37
echo "~ with, new Create a new application"
38
echo "~ run Run the application in the current window"
39
echo "~ debug Run the application under JDPA debugger"
40
echo "~ test Run all tests"
41
echo "~ help Show more commands"
46
# ~~~~~~~~~~~~~~~~~~~~~~ Where is the framework ?
48
absname "`dirname $0`"
52
# ~~~~~~~~~~~~~~~~~~~~~~ Display logo
55
echo "~ _ __ | | __ _ _ _| |"
56
echo "~ | '_ \\| |/ _' | || |_|"
57
echo "~ | __/|_|\\____|\\__ (_)"
60
echo "~ play! `cat "${PLAY_BASE}/framework/src/play/version"` - http://www.playframework.org"
64
# ~~~~~~~~~~~~~~~~~~~~~~ Which is the command ?
58
65
if [ -z "$1" ]; then
67
if [ "$path" = . ]; then
72
APPLICATION=`basename "$path"`
74
# JAVA_HOME/bin/java is used if defined
72
# ~~~~~~~~~~~~~~~~~~~~~~ [help] Display help
74
if [ "$PLAY_COMMAND" = "help" ] ; then
75
echo "~ Commands help : "
77
echo "~ new Create a new application"
78
echo "~ debug Run the application under JDPA debugger"
79
echo "~ eclipsify Create eclipse configuration files for this application"
80
echo "~ help To show more commands"
81
echo "~ logs Follow logs of the running application"
82
echo "~ netbeansify Create netbeans configuration files for this application"
83
echo "~ pid Display the pid of the running application"
84
echo "~ run Run the application in the current window"
85
echo "~ start Start the application in background"
86
echo "~ stop Stop the application"
87
echo "~ test Run all tests"
89
echo "~ Check full documentation at http://www.playframework.org/manual"
95
# ~~~~~~~~~~~~~~~~~~~~~~ Where is the application ?
100
APPLICATION_PATH="$2"
102
if [ "$PLAY_COMMAND" = "new" ]; then
103
if [ -d $APPLICATION_PATH ]; then
104
echo "OK" > /dev/null
106
mkdir $APPLICATION_PATH
109
absname "$APPLICATION_PATH"
110
APPLICATION_PATH="${return}"
113
# ~~~~~~~~~~~~~~~~~~~~~~ [new] Create a new application
115
if [ "$PLAY_COMMAND" = "new" ] ; then
116
echo "~ The new application will be created in ${APPLICATION_PATH}"
117
echo -n "~ What is the application name ? "
119
cp -R ${PLAY_BASE}/resources/application-skel/* $APPLICATION_PATH
120
sed -e "s#%APPLICATION_NAME%#$applicationName#g" "$PLAY_BASE/resources/application-skel/conf/application.conf" > "$APPLICATION_PATH/conf/application.conf"
122
echo "~ Ok, the application is created."
123
echo "~ Start it with : play run $2"
130
# ~~~~~~~~~~~~~~~~~~~~~~ Check if it's a valid application
132
if [ ! -r "${APPLICATION_PATH}/conf/routes" ] ; then
133
echo "~ Oops. ${APPLICATION_PATH} does not seem to host a valid application"
139
# ~~~~~~~~~~~~~~~~~~~~~~ JAVA_HOME/bin/java is used if defined
75
140
if [ ! -d "$JAVA_HOME" ] ; then
78
JAVA_PATH="$JAVA_HOME/bin/java"
82
CLASSPATH="$path/conf/"
83
PLAYCLASSES="$PLAY_BASE/framework/classes"
84
PLAYJAR="$PLAY_BASE/framework/play.jar"
86
if [ "$COMMANDE" = "run" ]; then
87
CLASSPATH=$CLASSPATH:$PLAYCLASSES;
89
CLASSPATH=$CLASSPATH:$PLAYJAR;
92
# Add all framework libs
97
for jar in `ls -c1 "$PLAY_BASE/framework/lib"/*.jar`; do
98
CLASSPATH="$CLASSPATH:$jar";
106
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
110
if [ "$COMMANDE" = new ] ; then
112
dest="`dirname "${path}"`/`basename "${path}"`"
113
cp -R ${PLAY_BASE}/resources/application-skel ${dest}
114
echo "~ Ok, application created `dirname "${path}"`/`basename "${path}"`"
115
echo "~ Start it with 'play run `dirname "${path}"`/`basename "${path}"`'"
121
# Check if it's a valid application
122
if [ ! -r "${path}/conf/routes" ] ; then
124
echo "~ Oops. ${path} does not seem to host a valid application"
130
if [ "$COMMANDE" = "run" ]; then
132
echo "~ Ctrl+C to break"
134
"$JAVA_PATH" -javaagent:${PLAY_BASE}/framework/play.jar -classpath "$CLASSPATH" -Dcom.sun.management.jmxremote -Djava.endorsed.dirs="$PLAY_BASE/framework/endorsed" -Dapplication.path="`dirname "${path}"`/`basename "${path}"`" play.server.Server
138
elif [ "$COMMANDE" = "debug" ] ; then
142
echo "$JAVA_PATH -javaagent:${PLAY_BASE}/framework/play.jar -classpath $CLASSPATH -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Dplay.debug=yes -Dcom.sun.management.jmxremote -Djava.endorsed.dirs=$PLAY_BASE/framework/endorsed -Dapplication.path=`dirname "${path}"`/`basename ${path}` play.server.Server"
144
echo "~ Ctrl+C to break"
146
"$JAVA_PATH" -javaagent:${PLAY_BASE}/framework/play.jar -classpath "$CLASSPATH" -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Dplay.debug=yes -Dcom.sun.management.jmxremote -Djava.endorsed.dirs="$PLAY_BASE/framework/endorsed" -Dapplication.path="`dirname "${path}"`/`basename "${path}"`" play.server.Server
149
elif [ "$COMMANDE" = start ] ; then
151
if [ ! -r "${path}/logs" ] ; then
152
mkdir "${path}/logs";
155
if [ -f "${path}/server.pid" ] ; then
157
echo "~ $APPLICATION is already started (or delete `dirname ${path}`/`basename ${path}`/server.pid)"
161
"$JAVA_PATH" -classpath "$CLASSPATH" -Dcom.sun.management.jmxremote -Djava.endorsed.dirs="$PLAY_BASE/framework/endorsed" -Dapplication.path="`dirname "${path}"`/`basename "${path}"`" play.server.Server > "${path}"/logs/system.out 2>&1 &
163
echo "~ $APPLICATION is started"
164
echo "~ Output is redirected to `dirname ${path}`/`basename ${path}`/logs/system.out ..."
166
echo $! > "${path}/server.pid"
171
elif [ "$COMMANDE" = stop ] ; then
173
if [ -f "${path}/server.pid" ] ; then
175
echo "~ kill `cat ${path}/server.pid`"
177
kill `cat "$path/server.pid"`
178
rm "${path}/server.pid"
179
rm "${path}/logs/system.out"
183
echo "~ $APPLICATION is not started"
189
elif [ "$COMMANDE" = package-plugin ] ; then
191
PLUGIN_NAME="`cat conf/application.conf | grep application.name | sed -e 's/application.name=//g'`"
194
echo "~ Ok, packaging plugin $PLUGIN_NAME"
196
ant -f $PLAY_BASE/framework/build.xml package-plugin -Dplugin.dir="${path}" -Dplugin.name="$PLUGIN_NAME"
198
echo "~ Plugin is built : `dirname ${path}`/`basename ${path}`/dist/$PLUGIN_NAME.plugin"
202
elif [ "$COMMANDE" = netbeansify ] ; then
204
PROJECT_NAME="`cat $path/conf/application.conf | grep application.name | sed -e 's/application.name=//g'`"
205
rm -rf "$path/nbproject"
206
mkdir "$path/nbproject"
207
sed -e "s#%APPLICATION_NAME%#$PROJECT_NAME#g" "$PLAY_BASE/resources/nbproject/project.xml" > "$path/nbproject/project.xml.1.tmp"
208
sed -e "s#%ANT_SCRIPT%#$PLAY_BASE/framework/build.xml#g" "$path/nbproject/project.xml.1.tmp" > "$path/nbproject/project.xml.2.tmp"
209
sed -e "s#%APPLICATION_PATH%#$path#g" "$path/nbproject/project.xml.2.tmp" > "$path/nbproject/project.xml.3.tmp"
210
sed -e "s#%PLAY_CLASSPATH%#$CLASSPATH#g" "$path/nbproject/project.xml.3.tmp" > "$path/nbproject/project.xml"
211
rm "$path/nbproject/project.xml.1.tmp"
212
rm "$path/nbproject/project.xml.2.tmp"
213
rm "$path/nbproject/project.xml.3.tmp"
216
elif [ "$COMMANDE" = eclipsify ] ; then
218
PROJECT_NAME="`cat conf/application.conf | grep application.name | sed -e 's/application.name=//g'`"
220
rm -f "$path/.project" "$path/.classpath" "$path/play-app.launch"
221
sed -e "s/%PROJECT_NAME%/$PROJECT_NAME/g" "$PLAY_BASE/application/eclipse-config/.project" > "$path/.project"
222
# sed -e "s/%PROJECT_NAME%/$PROJECT_NAME/g" "$PLAY_BASE/application/eclipse-config/play-app.launch" > "$path/play-app.launch"
225
for p in $CLASSPATH; do
143
JAVA_PATH="$JAVA_HOME/bin/java"
147
# ~~~~~~~~~~~~~~~~~~~~~~ Build classpath
149
CLASSPATH="$APPLICATION_PATH/conf/"
150
CLASSPATH="$CLASSPATH:$PLAY_BASE/framework/play.jar"
151
for jar in `ls -c1 "$APPLICATION_PATH/lib"/*.jar 2> /dev/null`; do
153
CLASSPATH="$CLASSPATH:$return";
155
for jar in `ls -c1 "$PLAY_BASE/framework/lib"/*.jar 2> /dev/null`; do
157
CLASSPATH="$CLASSPATH:$return";
161
# ~~~~~~~~~~~~~~~~~~~~~~ [run] Run the application
163
if [ "$PLAY_COMMAND" = "run" ] ; then
164
echo "~ Ctrl+C to break"
166
"$JAVA_PATH" -javaagent:${PLAY_BASE}/framework/play.jar -classpath "$CLASSPATH" -Djava.endorsed.dirs="$PLAY_BASE/framework/endorsed" -Dapplication.path="${APPLICATION_PATH}" play.server.Server
172
# ~~~~~~~~~~~~~~~~~~~~~~ [debug] Run the application with JPDA enabled
174
if [ "$PLAY_COMMAND" = "debug" ] ; then
175
echo "~ Ctrl+C to break"
178
"$JAVA_PATH" -javaagent:${PLAY_BASE}/framework/play.jar -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Dplay.debug=yes -classpath "$CLASSPATH" -Djava.endorsed.dirs="$PLAY_BASE/framework/endorsed" -Dapplication.path="${APPLICATION_PATH}" play.server.Server
184
# ~~~~~~~~~~~~~~~~~~~~~~ [start] Start the application in background
186
if [ "$PLAY_COMMAND" = "start" ] ; then
187
if [ ! -r "${APPLICATION_PATH}/logs" ] ; then
188
mkdir "${APPLICATION_PATH}/logs";
190
if [ -f "${APPLICATION_PATH}/server.pid" ] ; then
191
echo "~ Oops. $APPLICATION_PATH is already started ! (or delete ${APPLICATION_PATH}/server.pid)"
195
"$JAVA_PATH" -javaagent:${PLAY_BASE}/framework/play.jar -classpath "$CLASSPATH" -Djava.endorsed.dirs="$PLAY_BASE/framework/endorsed" -Dapplication.path="${APPLICATION_PATH}" play.server.Server > "${APPLICATION_PATH}"/logs/system.out 2>&1 &
196
echo "~ Ok, $APPLICATION_PATH is started"
197
echo "~ Output is redirected to ${APPLICATION_PATH}/logs/system.out ..."
198
echo $! > "${APPLICATION_PATH}/server.pid"
199
echo "~ The pid is `cat ${APPLICATION_PATH}/server.pid`"
207
# ~~~~~~~~~~~~~~~~~~~~~~ [stop] Stop the application running in background
209
if [ "$PLAY_COMMAND" = "stop" ] ; then
210
if [ -f "${APPLICATION_PATH}/server.pid" ] ; then
211
echo "~ kill `cat ${APPLICATION_PATH}/server.pid`"
212
kill `cat "$APPLICATION_PATH/server.pid"`
213
rm "${APPLICATION_PATH}/server.pid"
214
rm "${APPLICATION_PATH}/logs/system.out"
215
echo "~ Ok, $APPLICATION_PATH is stopped"
219
echo "~ Oops. $APPLICATION_PATH is not started !"
226
# ~~~~~~~~~~~~~~~~~~~~~~ [pid] Display the pid of the running application
228
if [ "$PLAY_COMMAND" = "pid" ] ; then
229
if [ -f "${APPLICATION_PATH}/server.pid" ] ; then
230
echo "~ The pid for $APPLICATION_PATH is `cat ${APPLICATION_PATH}/server.pid`"
234
echo "~ Oops. $APPLICATION_PATH is not started !"
241
# ~~~~~~~~~~~~~~~~~~~~~~ [logs] Follow logs of the running application
243
if [ "$PLAY_COMMAND" = "logs" ] ; then
244
if [ -f "${APPLICATION_PATH}/server.pid" ] ; then
245
tail -f "${APPLICATION_PATH}/logs/system.out"
249
echo "~ Oops. $APPLICATION_PATH is not started"
256
# ~~~~~~~~~~~~~~~~~~~~~~ [restart] Restart the running application
258
if [ "$PLAY_COMMAND" = "restart" ] ; then
259
if [ -f "${APPLICATION_PATH}/server.pid" ] ; then
260
echo "~ kill `cat ${APPLICATION_PATH}/server.pid`"
261
kill `cat "$APPLICATION_PATH/server.pid"`
262
rm "${APPLICATION_PATH}/server.pid"
263
rm "${APPLICATION_PATH}/logs/system.out"
264
echo "~ $APPLICATION_PATH is stopped"
266
echo "~ Oops. $APPLICATION_PATH is not started !"
270
"$JAVA_PATH" -javaagent:${PLAY_BASE}/framework/play.jar -classpath "$CLASSPATH" -Djava.endorsed.dirs="$PLAY_BASE/framework/endorsed" -Dapplication.path="${APPLICATION_PATH}" play.server.Server > "${APPLICATION_PATH}"/logs/system.out 2>&1 &
271
echo "~ $APPLICATION_PATH is started"
272
echo "~ Output is redirected to ${APPLICATION_PATH}/logs/system.out ..."
273
echo $! > "${APPLICATION_PATH}/server.pid"
274
echo "~ The new pid is `cat ${APPLICATION_PATH}/server.pid`"
280
# ~~~~~~~~~~~~~~~~~~~~~~ [netbeansify] Create netbeans configuration files
282
if [ "$PLAY_COMMAND" = "netbeansify" ] ; then
283
PROJECT_NAME="`cat $APPLICATION_PATH/conf/application.conf | grep application.name | sed -e 's/application.name=//g'`"
284
rm -rf "$APPLICATION_PATH/nbproject"
285
mkdir "$APPLICATION_PATH/nbproject"
286
sed -e "s|%APPLICATION_NAME%|$PROJECT_NAME|g" "$PLAY_BASE/resources/nbproject/project.xml" > "$APPLICATION_PATH/nbproject/project.xml.1.tmp"
287
sed -e "s|%ANT_SCRIPT%|$PLAY_BASE/framework/build.xml|g" "$APPLICATION_PATH/nbproject/project.xml.1.tmp" > "$APPLICATION_PATH/nbproject/project.xml.2.tmp"
288
sed -e "s|%APPLICATION_PATH%|$APPLICATION_PATH|g" "$APPLICATION_PATH/nbproject/project.xml.2.tmp" > "$APPLICATION_PATH/nbproject/project.xml.3.tmp"
289
sed -e "s|%PLAY_CLASSPATH%|$CLASSPATH|g" "$APPLICATION_PATH/nbproject/project.xml.3.tmp" > "$APPLICATION_PATH/nbproject/project.xml"
290
rm "$APPLICATION_PATH/nbproject/project.xml.1.tmp"
291
rm "$APPLICATION_PATH/nbproject/project.xml.2.tmp"
292
rm "$APPLICATION_PATH/nbproject/project.xml.3.tmp"
293
echo "~ Ok, the application is ready for netbeans"
294
echo "~ Just open $APPLICATION_PATH as a netbeans project"
296
echo "~ Use netbeansify again when you want to update netbeans configuration files"
302
# ~~~~~~~~~~~~~~~~~~~~~~ [eclipsify] Create eclipse configuration files
304
if [ "$PLAY_COMMAND" = "eclipsify" ] ; then
305
PROJECT_NAME="`cat $APPLICATION_PATH/conf/application.conf | grep application.name | sed -e 's/application.name=//g'`"
306
rm -rf "$APPLICATION_PATH/.project"
307
rm -rf "$APPLICATION_PATH/.classpath"
308
rm -rf "$APPLICATION_PATH/*.launch"
309
sed -e "s|%PROJECT_NAME%|$PROJECT_NAME|g" "$PLAY_BASE/resources/eclipse/.project" > "$APPLICATION_PATH/.project"
312
for p in $CLASSPATH; do
226
313
if [ -f "$p" ]; then
228
XML="$XML <classpathentry kind=\"lib\" path=\"${file}\" />"
315
XML="$XML<classpathentry kind=\"lib\" path=\"${return}\" /> "
231
sed -e "s|%PROJECTCLASSPATH%|${XML}|g" "$PLAY_BASE/application/eclipse-config/.classpath" > "$path/.classpath"
234
echo "~ This project is ready for eclipse !"
238
elif [ "$COMMANDE" = pid ] ; then
240
if [ -f "${path}/server.pid" ] ; then
242
echo "~ pid for $APPLICATION is `cat ${path}/server.pid`"
247
echo "~ $APPLICATION is not started"
253
elif [ "$COMMANDE" = logs ] ; then
255
if [ -f "${path}/server.pid" ] ; then
257
tail -f "${path}/logs/system.out"
262
echo "~ $APPLICATION is not started"
268
elif [ "$COMMANDE" = restart ] ; then
270
if [ -f "${path}/server.pid" ] ; then
272
echo "~ kill `cat ${path}/server.pid`"
274
kill `cat "$path/server.pid"`
275
rm "${path}/server.pid"
276
rm "${path}/logs/system.out"
279
echo "~ $APPLICATION is not started"
284
# Hack (for windows of course)
287
if [ -f "${path}/server.pid" ] ; then
288
echo "~ $APPLICATION is already started (or delete `dirname ${path}`/`basename ${path}`/server.pid)"
292
"$JAVA_PATH" -classpath "$CLASSPATH" -Dcom.sun.management.jmxremote -Djava.endorsed.dirs="$PLAY_BASE/framework/endorsed" -Dapplication.path="`dirname "${path}"`/`basename "${path}"`" play.server.Server > "${path}"/logs/system.out 2>&1 &
293
echo "~ $APPLICATION is started"
294
echo "~ Output is redirected to `dirname ${path}`/`basename ${path}`/logs/system.out ..."
296
echo $! > "${path}/server.pid"
318
sed -e "s|%PROJECTCLASSPATH%|${XML}|g" "$PLAY_BASE/resources/eclipse/.classpath" > "$APPLICATION_PATH/.classpath"
319
sed -e "s|%PROJECT_NAME%|$PROJECT_NAME|g" "$PLAY_BASE/resources/eclipse/play.launch" > "$APPLICATION_PATH/$PROJECT_NAME.launch.tmp"
320
sed -e "s|%PLAY_BASE%|$PLAY_BASE|g" "$APPLICATION_PATH/$PROJECT_NAME.launch.tmp" > "$APPLICATION_PATH/$PROJECT_NAME.launch"
321
rm -rf "$APPLICATION_PATH/$PROJECT_NAME.launch.tmp"
322
echo "~ Ok, the application is ready for eclipse"
323
echo "~ Import the project into your eclipse workspace using File/Import/General/Existing project ..."
325
echo "~ Use eclipsify again when you want to update eclipse configuration files."
326
echo "~ But it's saffer to delete and re-import the project into your workspace because eclipse keeps dirty caches ..."
332
# ~~~~~~~~~~~~~~~~~~~~~~ Bad command
334
echo "~ Oops. Unknown command : $PLAY_COMMAND"