/* * Copyright 2012 James Moger * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.moxie.ant; import java.io.File; import java.text.MessageFormat; import java.util.Date; import org.apache.tools.ant.taskdefs.Java; import org.apache.tools.ant.types.Path; import org.moxie.Build; import org.moxie.Scope; import org.moxie.Toolkit.Key; import org.moxie.console.Console; import org.moxie.utils.StringUtils; public class MxRun extends Java { Boolean showtitle; Scope scope; public MxRun() { super(); setTaskName("mx:run"); setFork(true); } public void setShowtitle(boolean value) { this.showtitle = value; } public boolean isShowTitle() { return showtitle == null || showtitle; } public void setScope(String value) { this.scope = Scope.fromString(value); } @Override public void execute() { Build build = (Build) getProject().getReference(Key.build.referenceId()); Console console = build.getConsole(); if (scope == null) { scope = Scope.compile; } if (isShowTitle()) { console.title(getClass(), build.getPom().getCoordinates() + ", " + scope.name()); } if (StringUtils.isEmpty(getCommandLine().getClassname())) { getCommandLine().setClassname(build.getConfig().getProjectConfig().getMainclass()); } Date start = new Date(); console.key("started", start.toString()); console.key("mainclass", getCommandLine().getClassname()); console.log(); Path classpath = createClasspath(); // add project compiled output path classpath.createPathElement().setLocation(build.getConfig().getOutputDirectory(scope)); if (!scope.isDefault()) { classpath.createPathElement().setLocation(build.getConfig().getOutputDirectory(Scope.compile)); } // add resource directories for (File dir : build.getConfig().getResourceDirectories(scope)) { classpath.createPathElement().setLocation(dir); } if (!scope.isDefault()) { for (File dir : build.getConfig().getResourceDirectories(Scope.compile)) { classpath.createPathElement().setLocation(dir); } } // add jar classpaths for (File jarFile : build.getSolver().getClasspath(scope)) { classpath.createPathElement().setLocation(jarFile); } // add linked projects compiled output path, resource directories, and jar files for (Build linkedProject : build.getSolver().getLinkedModules()) { classpath.createPathElement().setLocation(linkedProject.getConfig().getOutputDirectory(Scope.compile)); for (File dir : linkedProject.getConfig().getResourceDirectories(Scope.compile)) { classpath.createPathElement().setLocation(dir); } for (File jarFile : linkedProject.getSolver().getClasspath(Scope.compile)) { classpath.createPathElement().setLocation(jarFile); } } console.debug(getCommandLine().describeCommand()); super.execute(); Date end = new Date(); console.key("finished", MessageFormat.format("{0} ({1} secs)", end, (end.getTime() - start.getTime())/1000L)); } }