You are viewing a plain text version of this content. The canonical link for it is here.
Posted to easyant-commits@incubator.apache.org by hi...@apache.org on 2011/02/22 15:56:09 UTC
svn commit: r1073371 [11/28] - in /incubator/easyant/core/trunk: ./ bin/
example/build-configurations/
example/build-configurations/src/main/java/org/apache/easyant/example/
example/build-configurations/src/test/java/org/apache/easyant/example/
example...
Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/BuildConfigurationHelper.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/BuildConfigurationHelper.java?rev=1073371&r1=1073370&r2=1073371&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/BuildConfigurationHelper.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/BuildConfigurationHelper.java Tue Feb 22 15:55:55 2011
@@ -28,139 +28,139 @@ import org.apache.tools.ant.Project;
*/
public class BuildConfigurationHelper {
- /**
- * This methods verify if at least one build configuration given in
- * arguments is contained in buildConfContainer.
- *
- * @param buildConfs
- * a string that represent build configurations names (can
- * contains multiple configuration if they are comma separated)
- * @param buildConfContainer
- * a string that represent build configurations container (can
- * contains multiple configuration if they are comma separated)
- * @return true if the string contains at least one matching build
- * configurations otherwise return false. If buildConfs is null this
- * methods return true.
- */
- public static boolean contains(String buildConfs, String buildConfContainer) {
- if (buildConfs == null) {
- return true;
- }
- return (null != getFirstBuildConfigurationMatching(buildConfs,
- buildConfContainer));
- }
-
- /**
- * This methods return the first build configuration matching with the
- * criteria given in buildConfs argument.
- *
- * @param buildConfs
- * a string that represent build configurations names (can
- * contains multiple configuration if they are comma separated)
- * @param buildConfContainer
- * a string that represent build configurations container (can
- * contains multiple configuration if they are comma separated)
- * @return a string that represent the first build configuration found.
- * Return null if no build configuration matched.
- */
- public static String getFirstBuildConfigurationMatching(String buildConfs,
- String buildConfContainer) {
- if (buildConfs == null || buildConfContainer == null) {
- return null;
- }
- List<String> buildConfsToCheck = buildList(buildConfs);
- List<String> availableBuildConfs = buildList(buildConfContainer);
- for (String conf : buildConfsToCheck) {
- if (availableBuildConfs.contains(conf)) {
- return conf;
- }
- }
-
- return null;
- }
-
- /**
- * This methods removes all the spaces in a list of confs separated by comma
- *
- * @param confs
- * a string that represent a list of conf separated by comma
- * @return a string that represent a list of conf separated by comma without
- * spaces.
- */
- public static String removeSpaces(String confs) {
- return confs.replaceAll("\\s", "");
- }
-
- public static List<String> buildList(String conf) {
- return Arrays.asList(removeSpaces(conf).split(","));
-
- }
-
- /**
- * Check if build configuration is active
- *
- * @param requestedConfigurations
- * build configuration to check
- * @param p
- * the project (used to retrieve available and active build
- * configuration)
- * @param message
- * (prefix message used for log)
- * @return return true if buildconfiguration is active. This method also
- * returns true if requestedConfigurations is null
- */
- public static boolean isBuildConfigurationActive(
- String requestedConfigurations, Project p, String message) {
- if (requestedConfigurations == null) {
- p.log(message + " not bound to any build configuration",Project.MSG_DEBUG);
- return true;
- }
- List<String> buildConfigurationsList = buildList(requestedConfigurations);
-
- // check consistency, here we consider that a build configuration must
- // be explicitly declared
- if (p.getProperty(EasyAntMagicNames.AVAILABLE_BUILD_CONFIGURATIONS) == null) {
- throw new BuildException(
- "there is no available build configuration");
- }
-
- List<String> availableBuildConfigurations = Arrays.asList(p
- .getProperty(EasyAntMagicNames.AVAILABLE_BUILD_CONFIGURATIONS)
- .split(","));
-
- for (String conf : buildConfigurationsList) {
- if (!availableBuildConfigurations.contains(conf)) {
- throw new BuildException("unknown build configuration named "
- + conf);
- }
- }
-
- // is there any activated build configuration matching with the build
- // configurations defined?
- if (p.getProperty(EasyAntMagicNames.MAIN_CONFS) != null) {
- String buildConf = getFirstBuildConfigurationMatching(
- requestedConfigurations, p
- .getProperty(EasyAntMagicNames.MAIN_CONFS));
- if (buildConf != null) {
- p.log(message + " bound to build configuration " + buildConf,
- Project.MSG_DEBUG);
- return true;
- } else {
- // if no activated build configuration match with required build
- // configuration, it means
- // that related element should not be loaded
- p
- .log(
- message
- + " not bound to any active build configuration. Requested build configuration was "
- + requestedConfigurations,
- Project.MSG_DEBUG);
- return false;
- }
- } else {
- p.log("there is no activated build configuration",
- Project.MSG_DEBUG);
- return false;
- }
- }
+ /**
+ * This methods verify if at least one build configuration given in
+ * arguments is contained in buildConfContainer.
+ *
+ * @param buildConfs
+ * a string that represent build configurations names (can
+ * contains multiple configuration if they are comma separated)
+ * @param buildConfContainer
+ * a string that represent build configurations container (can
+ * contains multiple configuration if they are comma separated)
+ * @return true if the string contains at least one matching build
+ * configurations otherwise return false. If buildConfs is null this
+ * methods return true.
+ */
+ public static boolean contains(String buildConfs, String buildConfContainer) {
+ if (buildConfs == null) {
+ return true;
+ }
+ return (null != getFirstBuildConfigurationMatching(buildConfs,
+ buildConfContainer));
+ }
+
+ /**
+ * This methods return the first build configuration matching with the
+ * criteria given in buildConfs argument.
+ *
+ * @param buildConfs
+ * a string that represent build configurations names (can
+ * contains multiple configuration if they are comma separated)
+ * @param buildConfContainer
+ * a string that represent build configurations container (can
+ * contains multiple configuration if they are comma separated)
+ * @return a string that represent the first build configuration found.
+ * Return null if no build configuration matched.
+ */
+ public static String getFirstBuildConfigurationMatching(String buildConfs,
+ String buildConfContainer) {
+ if (buildConfs == null || buildConfContainer == null) {
+ return null;
+ }
+ List<String> buildConfsToCheck = buildList(buildConfs);
+ List<String> availableBuildConfs = buildList(buildConfContainer);
+ for (String conf : buildConfsToCheck) {
+ if (availableBuildConfs.contains(conf)) {
+ return conf;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * This methods removes all the spaces in a list of confs separated by comma
+ *
+ * @param confs
+ * a string that represent a list of conf separated by comma
+ * @return a string that represent a list of conf separated by comma without
+ * spaces.
+ */
+ public static String removeSpaces(String confs) {
+ return confs.replaceAll("\s", "");
+ }
+
+ public static List<String> buildList(String conf) {
+ return Arrays.asList(removeSpaces(conf).split(","));
+
+ }
+
+ /**
+ * Check if build configuration is active
+ *
+ * @param requestedConfigurations
+ * build configuration to check
+ * @param p
+ * the project (used to retrieve available and active build
+ * configuration)
+ * @param message
+ * (prefix message used for log)
+ * @return return true if buildconfiguration is active. This method also
+ * returns true if requestedConfigurations is null
+ */
+ public static boolean isBuildConfigurationActive(
+ String requestedConfigurations, Project p, String message) {
+ if (requestedConfigurations == null) {
+ p.log(message + " not bound to any build configuration",Project.MSG_DEBUG);
+ return true;
+ }
+ List<String> buildConfigurationsList = buildList(requestedConfigurations);
+
+ // check consistency, here we consider that a build configuration must
+ // be explicitly declared
+ if (p.getProperty(EasyAntMagicNames.AVAILABLE_BUILD_CONFIGURATIONS) == null) {
+ throw new BuildException(
+ "there is no available build configuration");
+ }
+
+ List<String> availableBuildConfigurations = Arrays.asList(p
+ .getProperty(EasyAntMagicNames.AVAILABLE_BUILD_CONFIGURATIONS)
+ .split(","));
+
+ for (String conf : buildConfigurationsList) {
+ if (!availableBuildConfigurations.contains(conf)) {
+ throw new BuildException("unknown build configuration named "
+ + conf);
+ }
+ }
+
+ // is there any activated build configuration matching with the build
+ // configurations defined?
+ if (p.getProperty(EasyAntMagicNames.MAIN_CONFS) != null) {
+ String buildConf = getFirstBuildConfigurationMatching(
+ requestedConfigurations, p
+ .getProperty(EasyAntMagicNames.MAIN_CONFS));
+ if (buildConf != null) {
+ p.log(message + " bound to build configuration " + buildConf,
+ Project.MSG_DEBUG);
+ return true;
+ } else {
+ // if no activated build configuration match with required build
+ // configuration, it means
+ // that related element should not be loaded
+ p
+ .log(
+ message
+ + " not bound to any active build configuration. Requested build configuration was "
+ + requestedConfigurations,
+ Project.MSG_DEBUG);
+ return false;
+ }
+ } else {
+ p.log("there is no activated build configuration",
+ Project.MSG_DEBUG);
+ return false;
+ }
+ }
}
Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConfiguration.java?rev=1073371&r1=1073370&r2=1073371&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConfiguration.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConfiguration.java Tue Feb 22 15:55:55 2011
@@ -33,455 +33,455 @@ import org.apache.tools.ant.Project;
*/
public class EasyAntConfiguration {
- /** Stream to use for logging. */
- private PrintStream out = System.out;
+ /** Stream to use for logging. */
+ private PrintStream out = System.out;
- /** Stream that we are using for logging error messages. */
- private PrintStream err = System.err;
+ /** Stream that we are using for logging error messages. */
+ private PrintStream err = System.err;
- /** Our current message output status. Follows Project.MSG_XXX. */
- private int msgOutputLevel = Project.MSG_INFO;
+ /** Our current message output status. Follows Project.MSG_XXX. */
+ private int msgOutputLevel = Project.MSG_INFO;
- /** File that we are using for configuration. */
- private File buildFile; /* null */
+ /** File that we are using for configuration. */
+ private File buildFile; /* null */
- private File buildModule; /* null */
+ private File buildModule; /* null */
- /** The build targets. */
- private Vector<String> targets = new Vector<String>(1);
- /** Set of properties that can be used by tasks. */
- private Properties definedProps = new Properties();
+ /** The build targets. */
+ private Vector<String> targets = new Vector<String>(1);
+ /** Set of properties that can be used by tasks. */
+ private Properties definedProps = new Properties();
- /** Names of classes to add as listeners to project. */
- private Vector<String> listeners = new Vector<String>(1);
+ /** Names of classes to add as listeners to project. */
+ private Vector<String> listeners = new Vector<String>(1);
- /** Indicates whether this build is to support interactive input */
- private boolean allowInput = true;
+ /** Indicates whether this build is to support interactive input */
+ private boolean allowInput = true;
- /** keep going mode */
- private boolean keepGoingMode = false;
+ /** keep going mode */
+ private boolean keepGoingMode = false;
- private boolean showMemoryDetails = false;
+ private boolean showMemoryDetails = false;
- /**
- * The Ant logger class. There may be only one logger. It will have the
- * right to use the 'out' PrintStream. The class must implements the
- * BuildLogger interface.
- */
- private String loggerClassname = null;
+ /**
+ * The Ant logger class. There may be only one logger. It will have the
+ * right to use the 'out' PrintStream. The class must implements the
+ * BuildLogger interface.
+ */
+ private String loggerClassname = null;
- /**
- * The Ant InputHandler class. There may be only one input handler.
- */
- private String inputHandlerClassname = null;
+ /**
+ * The Ant InputHandler class. There may be only one input handler.
+ */
+ private String inputHandlerClassname = null;
- /**
- * Whether or not output to the log is to be unadorned.
- */
- private boolean emacsMode = false;
+ /**
+ * Whether or not output to the log is to be unadorned.
+ */
+ private boolean emacsMode = false;
- /**
- * optional thread priority
- */
- private Integer threadPriority = null;
+ /**
+ * optional thread priority
+ */
+ private Integer threadPriority = null;
- /**
- * proxy flag: default is false
- */
- private boolean proxy = false;
+ /**
+ * proxy flag: default is false
+ */
+ private boolean proxy = false;
- private Set<PluginDescriptor> systemPlugins = new HashSet<PluginDescriptor>();
+ private Set<PluginDescriptor> systemPlugins = new HashSet<PluginDescriptor>();
- private Set<String> activeBuildConfigurations = new HashSet<String>();
+ private Set<String> activeBuildConfigurations = new HashSet<String>();
- private ClassLoader coreLoader;
+ private ClassLoader coreLoader;
- private boolean buildModuleLookupEnabled = false;
+ private boolean buildModuleLookupEnabled = false;
- private String easyantIvySettingsFile;
- private String easyantIvySettingsUrl;
+ private String easyantIvySettingsFile;
+ private String easyantIvySettingsUrl;
private boolean offline;
- /**
- * Get the ivysettings.xml file used by easyant
- *
- * @return a string representing the ivysettings.xml used by easyant
- */
- public String getEasyantIvySettingsFile() {
- return easyantIvySettingsFile;
- }
-
- /**
- * Set the ivysettings.xml file used by easyant
- *
- * @param easyantIvySettingsFile
- * a string representing the ivysettings.xml used by easyant
- */
- public void setEasyantIvySettingsFile(String easyantIvySettingsFile) {
- this.easyantIvySettingsFile = easyantIvySettingsFile;
- }
-
- /**
- * Get the url of a ivysettings.xml used by easyant
- *
- * @return a string representing the ivysettings.xml url used by easyant
- */
- public String getEasyantIvySettingsUrl() {
- return easyantIvySettingsUrl;
- }
-
- /**
- * Set the url of a ivysettings.xml used by easyant
- *
- * @param easyantIvySettingsUrl
- * a string representing the ivysettings.xml url used by easyant.
- */
- public void setEasyantIvySettingsUrl(String easyantIvySettingsUrl) {
- this.easyantIvySettingsUrl = easyantIvySettingsUrl;
- }
-
- /**
- * Set the url of a ivysettings.xml used by easyant
- *
- * @param easyantIvySettingsUrl
- * a string representing the ivysettings.xml url used by easyant.
- */
- public void setEasyantIvySettingsUrl(URL easyantIvySettingsUrl) {
- this.easyantIvySettingsUrl = easyantIvySettingsUrl.toString();
- }
-
- /**
- * Get the output level Default is Project.MSG_INFO Follows Project.MSG_XXX.
- *
- * @return a int representing the output level
- */
- public int getMsgOutputLevel() {
- return msgOutputLevel;
- }
-
- /**
- * Set the output level Default is Project.MSG_INFO Follows Project.MSG_XXX.
- *
- * @param msgOutputLevel
- * a int representing the output level
- */
- public void setMsgOutputLevel(int msgOutputLevel) {
- this.msgOutputLevel = msgOutputLevel;
- }
-
- /**
- * Get the buildFile that will be included
- *
- * @return a file representing the buildFile included in this project
- */
- public File getBuildFile() {
- return buildFile;
- }
-
- /**
- * Set the buildFile that will be included
- *
- * @param buildFile
- * a file representing the buildFile included in this project
- */
- public void setBuildFile(File buildFile) {
- this.buildFile = buildFile;
- }
-
- /**
- * Get the buildModule that will be included
- *
- * @return a file representing the buildModule included in this project
- */
- public File getBuildModule() {
- return buildModule;
- }
-
- /**
- * Set the buildModule that will be included
- *
- * @param buildModule
- * a file representing the buildModule included in this project
- */
- public void setBuildModule(File buildModule) {
- this.buildModule = buildModule;
- }
-
- /**
- * Get a Set of properties that can be used by tasks.
- *
- * @return a Set of properties that can be used by tasks.
- */
- public Properties getDefinedProps() {
- return definedProps;
- }
-
- /**
- * Set of properties that can be used by tasks.
- *
- * @param definedProps
- * a Set of properties that can be used by tasks.
- */
- public void setDefinedProps(Properties definedProps) {
- this.definedProps = definedProps;
- }
-
- /**
- * Indicates whether this build is to support interactive input
- *
- * @return true if input is allowed, false if we are in batchmode
- */
- public boolean isAllowInput() {
- return allowInput;
- }
-
- /**
- * Indicates whether this build is to support interactive input
- *
- * @param allowInput
- */
- public void setAllowInput(boolean allowInput) {
- this.allowInput = allowInput;
- }
-
- public boolean isKeepGoingMode() {
- return keepGoingMode;
- }
-
- public void setKeepGoingMode(boolean keepGoingMode) {
- this.keepGoingMode = keepGoingMode;
- }
-
- /**
- * Should we print memory details?
- *
- * @return true if we want to print memory details
- */
- public boolean isShowMemoryDetails() {
- return showMemoryDetails;
- }
-
- /**
- * Set to true if you want to print memory details Default is false.
- *
- * @param showMemoryDetails
- */
- public void setShowMemoryDetails(boolean showMemoryDetails) {
- this.showMemoryDetails = showMemoryDetails;
- }
-
- /**
- * Get the default logger classname The Ant logger class. There may be only
- * one logger. It will have the right to use the 'out' PrintStream. The
- * class must implements the BuildLogger interface.
- *
- * @return a string representing the logger classname
- */
- public String getLoggerClassname() {
- return loggerClassname;
- }
-
- /**
- * Set the default logger classname The Ant logger class. There may be only
- * one logger. It will have the right to use the 'out' PrintStream. The
- * class must implements the BuildLogger interface.
- *
- * @param loggerClassname
- * a string representing the logger classname
- */
- public void setLoggerClassname(String loggerClassname) {
- this.loggerClassname = loggerClassname;
- }
-
- /**
- * The Ant InputHandler class. There may be only one input handler.
- *
- * @return a string representing the input handler classname
- */
- public String getInputHandlerClassname() {
- return inputHandlerClassname;
- }
-
- /**
- * set The Ant InputHandler class. There may be only one input handler.
- *
- * @param inputHandlerClassname
- * a string representing the input handler classname
- */
- public void setInputHandlerClassname(String inputHandlerClassname) {
- this.inputHandlerClassname = inputHandlerClassname;
- }
-
- /**
- * Whether or not output to the log is to be unadorned.
- *
- * @return true if the output to the log is to be unadorned, otherwise false
- */
- public boolean isEmacsMode() {
- return emacsMode;
- }
-
- /**
- * Whether or not output to the log is to be unadorned.
- *
- * @param emacsMode
- */
- public void setEmacsMode(boolean emacsMode) {
- this.emacsMode = emacsMode;
- }
-
- /**
- * Get the threadPriority
- *
- * @return a integer representing the thread priority.
- */
- public Integer getThreadPriority() {
- return threadPriority;
- }
-
- public void setThreadPriority(Integer threadPriority) {
- this.threadPriority = threadPriority;
- }
-
- public boolean isProxy() {
- return proxy;
- }
-
- public void setProxy(boolean proxy) {
- this.proxy = proxy;
- }
-
- public Vector<String> getTargets() {
- return targets;
- }
-
- public void setTargets(Vector<String> targets) {
- this.targets = targets;
- }
-
- /**
- * Names of classes to add as listeners to project.
- *
- * @return a vector of listerners
- */
- public Vector<String> getListeners() {
- return listeners;
- }
-
- /**
- * Names of classes to add as listeners to project.
- *
- * @param listeners
- */
- public void setListeners(Vector<String> listeners) {
- this.listeners = listeners;
- }
-
- /**
- * Stream to use for logging.
- *
- * @return a stream used for logging
- */
- public PrintStream getOut() {
- return out;
- }
-
- /**
- * Stream to use for logging.
- *
- * @param out stream to use for logging
- */
- public void setOut(PrintStream out) {
- this.out = out;
- }
-
- /**
- * Stream that we are using for logging error messages.
- *
- * @return stream used for error logging
- */
- public PrintStream getErr() {
- return err;
- }
-
- /**
- * Stream that we are using for logging error messages.
- *
- * @param err stream used for error logging
- */
- public void setErr(PrintStream err) {
- this.err = err;
- }
-
- /**
- * Get a set of system plugins that will be included everytime
- *
- * @return a set of system plugins that will be included everytime
- */
- public Set<PluginDescriptor> getSystemPlugins() {
- return systemPlugins;
- }
-
- /**
- * set of system plugins that will be included everytime
- *
- * @param systemPlugins
- * a set of system plugins that will be included everytime
- */
- protected void setSystemPlugins(Set<PluginDescriptor> systemPlugins) {
- this.systemPlugins = systemPlugins;
- }
-
- /**
- * Add a system plugin that will be included everytime
- *
- * @param pluginDescriptor
- * representing a plugin
- * @return true if the plugin has been added to the list of system plugins, otherwise false
- */
- public boolean addSystemPlugin(PluginDescriptor pluginDescriptor) {
- if (pluginDescriptor == null) {
- throw new IllegalArgumentException(
- "pluginDescriptor cannot be null");
- }
- return this.systemPlugins.add(pluginDescriptor);
- }
-
- public ClassLoader getCoreLoader() {
- return coreLoader;
- }
-
- public void setCoreLoader(ClassLoader coreLoader) {
- this.coreLoader = coreLoader;
- }
-
- /**
- * Search parent directories for the build file.
- *
- * @return true if easyantEngine should lookup for buildModule
- */
- public boolean isBuildModuleLookupEnabled() {
- return this.buildModuleLookupEnabled;
- }
-
- /**
- * Search parent directories for the build file.
- *
- * @param buildModuleLookupEnabled
- * true if easyantEngine should lookup for buildModule
- */
- public void setBuildModuleLookupEnabled(boolean buildModuleLookupEnabled) {
- this.buildModuleLookupEnabled = buildModuleLookupEnabled;
- }
-
- public Set<String> getActiveBuildConfigurations() {
- return activeBuildConfigurations;
- }
-
- public void setActiveBuildConfigurations(Set<String> buildConfigurations) {
- this.activeBuildConfigurations = buildConfigurations;
- }
+ /**
+ * Get the ivysettings.xml file used by easyant
+ *
+ * @return a string representing the ivysettings.xml used by easyant
+ */
+ public String getEasyantIvySettingsFile() {
+ return easyantIvySettingsFile;
+ }
+
+ /**
+ * Set the ivysettings.xml file used by easyant
+ *
+ * @param easyantIvySettingsFile
+ * a string representing the ivysettings.xml used by easyant
+ */
+ public void setEasyantIvySettingsFile(String easyantIvySettingsFile) {
+ this.easyantIvySettingsFile = easyantIvySettingsFile;
+ }
+
+ /**
+ * Get the url of a ivysettings.xml used by easyant
+ *
+ * @return a string representing the ivysettings.xml url used by easyant
+ */
+ public String getEasyantIvySettingsUrl() {
+ return easyantIvySettingsUrl;
+ }
+
+ /**
+ * Set the url of a ivysettings.xml used by easyant
+ *
+ * @param easyantIvySettingsUrl
+ * a string representing the ivysettings.xml url used by easyant.
+ */
+ public void setEasyantIvySettingsUrl(String easyantIvySettingsUrl) {
+ this.easyantIvySettingsUrl = easyantIvySettingsUrl;
+ }
+
+ /**
+ * Set the url of a ivysettings.xml used by easyant
+ *
+ * @param easyantIvySettingsUrl
+ * a string representing the ivysettings.xml url used by easyant.
+ */
+ public void setEasyantIvySettingsUrl(URL easyantIvySettingsUrl) {
+ this.easyantIvySettingsUrl = easyantIvySettingsUrl.toString();
+ }
+
+ /**
+ * Get the output level Default is Project.MSG_INFO Follows Project.MSG_XXX.
+ *
+ * @return a int representing the output level
+ */
+ public int getMsgOutputLevel() {
+ return msgOutputLevel;
+ }
+
+ /**
+ * Set the output level Default is Project.MSG_INFO Follows Project.MSG_XXX.
+ *
+ * @param msgOutputLevel
+ * a int representing the output level
+ */
+ public void setMsgOutputLevel(int msgOutputLevel) {
+ this.msgOutputLevel = msgOutputLevel;
+ }
+
+ /**
+ * Get the buildFile that will be included
+ *
+ * @return a file representing the buildFile included in this project
+ */
+ public File getBuildFile() {
+ return buildFile;
+ }
+
+ /**
+ * Set the buildFile that will be included
+ *
+ * @param buildFile
+ * a file representing the buildFile included in this project
+ */
+ public void setBuildFile(File buildFile) {
+ this.buildFile = buildFile;
+ }
+
+ /**
+ * Get the buildModule that will be included
+ *
+ * @return a file representing the buildModule included in this project
+ */
+ public File getBuildModule() {
+ return buildModule;
+ }
+
+ /**
+ * Set the buildModule that will be included
+ *
+ * @param buildModule
+ * a file representing the buildModule included in this project
+ */
+ public void setBuildModule(File buildModule) {
+ this.buildModule = buildModule;
+ }
+
+ /**
+ * Get a Set of properties that can be used by tasks.
+ *
+ * @return a Set of properties that can be used by tasks.
+ */
+ public Properties getDefinedProps() {
+ return definedProps;
+ }
+
+ /**
+ * Set of properties that can be used by tasks.
+ *
+ * @param definedProps
+ * a Set of properties that can be used by tasks.
+ */
+ public void setDefinedProps(Properties definedProps) {
+ this.definedProps = definedProps;
+ }
+
+ /**
+ * Indicates whether this build is to support interactive input
+ *
+ * @return true if input is allowed, false if we are in batchmode
+ */
+ public boolean isAllowInput() {
+ return allowInput;
+ }
+
+ /**
+ * Indicates whether this build is to support interactive input
+ *
+ * @param allowInput
+ */
+ public void setAllowInput(boolean allowInput) {
+ this.allowInput = allowInput;
+ }
+
+ public boolean isKeepGoingMode() {
+ return keepGoingMode;
+ }
+
+ public void setKeepGoingMode(boolean keepGoingMode) {
+ this.keepGoingMode = keepGoingMode;
+ }
+
+ /**
+ * Should we print memory details?
+ *
+ * @return true if we want to print memory details
+ */
+ public boolean isShowMemoryDetails() {
+ return showMemoryDetails;
+ }
+
+ /**
+ * Set to true if you want to print memory details Default is false.
+ *
+ * @param showMemoryDetails
+ */
+ public void setShowMemoryDetails(boolean showMemoryDetails) {
+ this.showMemoryDetails = showMemoryDetails;
+ }
+
+ /**
+ * Get the default logger classname The Ant logger class. There may be only
+ * one logger. It will have the right to use the 'out' PrintStream. The
+ * class must implements the BuildLogger interface.
+ *
+ * @return a string representing the logger classname
+ */
+ public String getLoggerClassname() {
+ return loggerClassname;
+ }
+
+ /**
+ * Set the default logger classname The Ant logger class. There may be only
+ * one logger. It will have the right to use the 'out' PrintStream. The
+ * class must implements the BuildLogger interface.
+ *
+ * @param loggerClassname
+ * a string representing the logger classname
+ */
+ public void setLoggerClassname(String loggerClassname) {
+ this.loggerClassname = loggerClassname;
+ }
+
+ /**
+ * The Ant InputHandler class. There may be only one input handler.
+ *
+ * @return a string representing the input handler classname
+ */
+ public String getInputHandlerClassname() {
+ return inputHandlerClassname;
+ }
+
+ /**
+ * set The Ant InputHandler class. There may be only one input handler.
+ *
+ * @param inputHandlerClassname
+ * a string representing the input handler classname
+ */
+ public void setInputHandlerClassname(String inputHandlerClassname) {
+ this.inputHandlerClassname = inputHandlerClassname;
+ }
+
+ /**
+ * Whether or not output to the log is to be unadorned.
+ *
+ * @return true if the output to the log is to be unadorned, otherwise false
+ */
+ public boolean isEmacsMode() {
+ return emacsMode;
+ }
+
+ /**
+ * Whether or not output to the log is to be unadorned.
+ *
+ * @param emacsMode
+ */
+ public void setEmacsMode(boolean emacsMode) {
+ this.emacsMode = emacsMode;
+ }
+
+ /**
+ * Get the threadPriority
+ *
+ * @return a integer representing the thread priority.
+ */
+ public Integer getThreadPriority() {
+ return threadPriority;
+ }
+
+ public void setThreadPriority(Integer threadPriority) {
+ this.threadPriority = threadPriority;
+ }
+
+ public boolean isProxy() {
+ return proxy;
+ }
+
+ public void setProxy(boolean proxy) {
+ this.proxy = proxy;
+ }
+
+ public Vector<String> getTargets() {
+ return targets;
+ }
+
+ public void setTargets(Vector<String> targets) {
+ this.targets = targets;
+ }
+
+ /**
+ * Names of classes to add as listeners to project.
+ *
+ * @return a vector of listerners
+ */
+ public Vector<String> getListeners() {
+ return listeners;
+ }
+
+ /**
+ * Names of classes to add as listeners to project.
+ *
+ * @param listeners
+ */
+ public void setListeners(Vector<String> listeners) {
+ this.listeners = listeners;
+ }
+
+ /**
+ * Stream to use for logging.
+ *
+ * @return a stream used for logging
+ */
+ public PrintStream getOut() {
+ return out;
+ }
+
+ /**
+ * Stream to use for logging.
+ *
+ * @param out stream to use for logging
+ */
+ public void setOut(PrintStream out) {
+ this.out = out;
+ }
+
+ /**
+ * Stream that we are using for logging error messages.
+ *
+ * @return stream used for error logging
+ */
+ public PrintStream getErr() {
+ return err;
+ }
+
+ /**
+ * Stream that we are using for logging error messages.
+ *
+ * @param err stream used for error logging
+ */
+ public void setErr(PrintStream err) {
+ this.err = err;
+ }
+
+ /**
+ * Get a set of system plugins that will be included everytime
+ *
+ * @return a set of system plugins that will be included everytime
+ */
+ public Set<PluginDescriptor> getSystemPlugins() {
+ return systemPlugins;
+ }
+
+ /**
+ * set of system plugins that will be included everytime
+ *
+ * @param systemPlugins
+ * a set of system plugins that will be included everytime
+ */
+ protected void setSystemPlugins(Set<PluginDescriptor> systemPlugins) {
+ this.systemPlugins = systemPlugins;
+ }
+
+ /**
+ * Add a system plugin that will be included everytime
+ *
+ * @param pluginDescriptor
+ * representing a plugin
+ * @return true if the plugin has been added to the list of system plugins, otherwise false
+ */
+ public boolean addSystemPlugin(PluginDescriptor pluginDescriptor) {
+ if (pluginDescriptor == null) {
+ throw new IllegalArgumentException(
+ "pluginDescriptor cannot be null");
+ }
+ return this.systemPlugins.add(pluginDescriptor);
+ }
+
+ public ClassLoader getCoreLoader() {
+ return coreLoader;
+ }
+
+ public void setCoreLoader(ClassLoader coreLoader) {
+ this.coreLoader = coreLoader;
+ }
+
+ /**
+ * Search parent directories for the build file.
+ *
+ * @return true if easyantEngine should lookup for buildModule
+ */
+ public boolean isBuildModuleLookupEnabled() {
+ return this.buildModuleLookupEnabled;
+ }
+
+ /**
+ * Search parent directories for the build file.
+ *
+ * @param buildModuleLookupEnabled
+ * true if easyantEngine should lookup for buildModule
+ */
+ public void setBuildModuleLookupEnabled(boolean buildModuleLookupEnabled) {
+ this.buildModuleLookupEnabled = buildModuleLookupEnabled;
+ }
+
+ public Set<String> getActiveBuildConfigurations() {
+ return activeBuildConfigurations;
+ }
+
+ public void setActiveBuildConfigurations(Set<String> buildConfigurations) {
+ this.activeBuildConfigurations = buildConfigurations;
+ }
public void setOffline(boolean offline) {
this.offline = offline;
Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConstants.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConstants.java?rev=1073371&r1=1073370&r2=1073371&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConstants.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntConstants.java Tue Feb 22 15:55:55 2011
@@ -19,66 +19,66 @@ package org.apache.easyant.core;
public interface EasyAntConstants {
-
- /**
- * Name of the task name used for internal easyant jobs
- */
- public static final String EASYANT_TASK_NAME = "easyant";
-
- /**
- * Name of the default build module
- */
- public static final String DEFAULT_BUILD_MODULE = "module.ivy";
-
- /**
- * Name of the default build file
- */
- public static final String DEFAULT_BUILD_FILE = "module.ant";
-
- /**
- * Name of the default override build file
- */
- public static final String DEFAULT_OVERRIDE_BUILD_FILE = "override.module.ant";
-
- /**
- * URI of easyant module descriptor namespace
- */
- public static final String EASYANT_MD_NAMESPACE = "http://www.easyant.org";
-
- /**
- * Name of the default target
- */
- public static final String DEFAULT_TARGET = "doit";
-
- /**
- * Name of the default easyant plugins organisation
- */
- public static final String EASYANT_PLUGIN_ORGANISATION = "org.apache.easyant.plugins";
-
- /**
- * Name of the default easyant build types organisation
- */
- public static final String EASYANT_BUILDTYPES_ORGANISATION = "org.apache.easyant.buildtypes";
-
- /**
- * Name of the default easyant skeletons organisation
- */
- public static final String EASYANT_SKELETONS_ORGANISATION = "org.apache.easyant.skeletons";
-
- /**
- * Default location of user's easyant ivysettings file
- */
- public static final String DEFAULT_USER_EASYANT_IVYSETTINGS = "${user.home}/.easyant/easyant-ivysettings.xml";
-
- /**
- * Default location of global easyant ivysettings file
- */
- public static final String DEFAULT_GLOBAL_EASYANT_IVYSETTINGS = "file://${easyant.home}/easyant-ivysettings.xml";
-
- /**
- * Default value for pre module targets
- */
- public static final String DEFAULT_PRE_MODULE_TARGETS = "clean";
-
+
+ /**
+ * Name of the task name used for internal easyant jobs
+ */
+ public static final String EASYANT_TASK_NAME = "easyant";
+
+ /**
+ * Name of the default build module
+ */
+ public static final String DEFAULT_BUILD_MODULE = "module.ivy";
+
+ /**
+ * Name of the default build file
+ */
+ public static final String DEFAULT_BUILD_FILE = "module.ant";
+
+ /**
+ * Name of the default override build file
+ */
+ public static final String DEFAULT_OVERRIDE_BUILD_FILE = "override.module.ant";
+
+ /**
+ * URI of easyant module descriptor namespace
+ */
+ public static final String EASYANT_MD_NAMESPACE = "http://www.easyant.org";
+
+ /**
+ * Name of the default target
+ */
+ public static final String DEFAULT_TARGET = "doit";
+
+ /**
+ * Name of the default easyant plugins organisation
+ */
+ public static final String EASYANT_PLUGIN_ORGANISATION = "org.apache.easyant.plugins";
+
+ /**
+ * Name of the default easyant build types organisation
+ */
+ public static final String EASYANT_BUILDTYPES_ORGANISATION = "org.apache.easyant.buildtypes";
+
+ /**
+ * Name of the default easyant skeletons organisation
+ */
+ public static final String EASYANT_SKELETONS_ORGANISATION = "org.apache.easyant.skeletons";
+
+ /**
+ * Default location of user's easyant ivysettings file
+ */
+ public static final String DEFAULT_USER_EASYANT_IVYSETTINGS = "${user.home}/.easyant/easyant-ivysettings.xml";
+
+ /**
+ * Default location of global easyant ivysettings file
+ */
+ public static final String DEFAULT_GLOBAL_EASYANT_IVYSETTINGS = "file://${easyant.home}/easyant-ivysettings.xml";
+
+ /**
+ * Default value for pre module targets
+ */
+ public static final String DEFAULT_PRE_MODULE_TARGETS = "clean";
+
}
Modified: incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntEngine.java
URL: http://svn.apache.org/viewvc/incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntEngine.java?rev=1073371&r1=1073370&r2=1073371&view=diff
==============================================================================
--- incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntEngine.java (original)
+++ incubator/easyant/core/trunk/src/main/java/org/apache/easyant/core/EasyAntEngine.java Tue Feb 22 15:55:55 2011
@@ -61,684 +61,684 @@ import org.apache.tools.ant.util.ProxySe
*/
public class EasyAntEngine {
- private static final long MEGABYTE = 1024 * 1024;;
+ private static final long MEGABYTE = 1024 * 1024;;
- private final EasyAntConfiguration configuration;
+ private final EasyAntConfiguration configuration;
- private PluginService pluginService = null;
+ private PluginService pluginService = null;
- /**
- * Default constructor will initialize the default configuration
- */
- public EasyAntEngine() {
- this(EasyantConfigurationFactory.getInstance()
- .createDefaultConfiguration());
- }
-
- /**
- * Constructor if you want to use a custom configuration
- *
- * @param configuration
- */
- public EasyAntEngine(final EasyAntConfiguration configuration) {
- this.configuration = configuration;
- }
-
- /**
- * Configure easyant ivy instance
- *
- * @param project
- * project instance
- * @return a configured {@link Ivy} instance
- */
- protected Ivy configureEasyAntIvyInstance(Project project) {
- IvyConfigure easyantIvyConfigure = new IvyConfigure();
- easyantIvyConfigure
- .setSettingsId(EasyAntMagicNames.EASYANT_IVY_INSTANCE);
-
- project
- .setNewProperty(
- EasyAntMagicNames.EASYANT_DEFAULT_IVYSETTINGS,
- this
- .getClass()
- .getResource(
- "/org/apache/easyant/core/default-easyant-ivysettings.xml")
- .toExternalForm());
- project
- .setNewProperty(
- EasyAntMagicNames.EASYANT_EXTRA_IVYSETTINGS,
- this
- .getClass()
- .getResource(
- "/org/apache/easyant/core/extra-easyant-ivysettings.xml")
- .toExternalForm());
-
- project.setNewProperty(EasyAntMagicNames.EASYANT_CORE_REPO_URL, this
- .getClass().getResource(
- "/org/apache/easyant/core/repository/modules")
- .toExternalForm());
- if (this.getClass().getResource(
- "/org/apache/easyant/repository/extra-modules") != null) {
- project.setNewProperty(EasyAntMagicNames.EASYANT_EXTRA_REPO_URL,
- this.getClass().getResource(
- "/org/apache/easyant/repository/extra-modules")
- .toExternalForm());
- }
-
- File userSettings = getUserEasyAntIvySettings(project);
- String globalSettings = getGlobalEasyAntIvySettings(project);
- boolean isIgnoringUserIvysettings=Project.toBoolean(project.getProperty(EasyAntMagicNames.IGNORE_USER_IVYSETTINGS));
-
- if (userSettings.exists() && !isIgnoringUserIvysettings) {
- project.log("loading user's easyant ivysettings file from "
- + userSettings.getAbsolutePath(),Project.MSG_DEBUG);
- easyantIvyConfigure.setFile(userSettings);
- } else if (globalSettings != null) {
- project.log("loading global easyant ivysettings file from "
- + globalSettings,Project.MSG_DEBUG);
- try {
- easyantIvyConfigure.setUrl(globalSettings);
- } catch (MalformedURLException malformedUrl) {
- throw new BuildException(
- "Unable to parse easyant ivysettings from the following url : "
- + globalSettings, malformedUrl);
- }
-
- } else {
- project.log("using easyant default ivy settings file",
- Project.MSG_VERBOSE);
- String url = project
- .getProperty(EasyAntMagicNames.EASYANT_DEFAULT_IVYSETTINGS);
- try {
- easyantIvyConfigure.setUrl(url);
- } catch (MalformedURLException malformedUrl) {
- throw new BuildException(
- "Unable to parse easyant ivysettings from the following url : "
- + url, malformedUrl);
- }
- }
- easyantIvyConfigure.setProject(project);
- easyantIvyConfigure.setTaskName("configure-easyant");
- easyantIvyConfigure.execute();
-
- IvyAntSettings ivyAntSettings = IvyInstanceHelper
- .getEasyAntIvyAntSettings(project);
- return ivyAntSettings.getConfiguredIvyInstance(easyantIvyConfigure);
- }
-
- /**
- * Get user easyant-ivysettings file
- *
- * @param project
- * @return the configured user easyant-ivysettings.file
- */
- private File getUserEasyAntIvySettings(Project project) {
- // path can be specified through a property
- String path = project
- .getProperty(EasyAntMagicNames.USER_EASYANT_IVYSETTINGS);
- // if no property is set check the default location
- if (path == null) {
- path = PropertyHelper.getPropertyHelper(project).replaceProperties(
- EasyAntConstants.DEFAULT_USER_EASYANT_IVYSETTINGS);
- }
- project.log("user's easyant-ivysettings file : " + path,
- Project.MSG_DEBUG);
- return new File(path);
- }
-
- /**
- * Get global easyant-ivysettings file
- *
- * @param project
- * @return the configured global easyant-ivysettings.file
- */
- private String getGlobalEasyAntIvySettings(Project project) {
- PropertyHelper helper = PropertyHelper.getPropertyHelper(project);
- String path=null;
- if (configuration.getEasyantIvySettingsFile() != null) {
- File f = new File(helper.replaceProperties(configuration.getEasyantIvySettingsFile()));
- try {
- path = f.toURL().toExternalForm();
- } catch (MalformedURLException e) {
- throw new BuildException("Can't load easyant ivysettings file from "+ f.getAbsolutePath());
- }
- }
- if (configuration.getEasyantIvySettingsUrl() != null) {
- path = helper.replaceProperties(configuration.getEasyantIvySettingsUrl());
- }
- // path can be specified through a property
- if (path==null && project.getProperty(EasyAntMagicNames.GLOBAL_EASYANT_IVYSETTINGS) != null) {
- path = project
- .getProperty(EasyAntMagicNames.GLOBAL_EASYANT_IVYSETTINGS);
- }
- // if no property is set check the default location
- if (path == null) {
- path = helper.replaceProperties(
- EasyAntConstants.DEFAULT_GLOBAL_EASYANT_IVYSETTINGS);
- }
- project.log("global easyant-ivysettings file : " + path,
- Project.MSG_DEBUG);
- return path;
- }
-
- protected void configurePluginService(Project project,
- Ivy easyantIvyInstance) {
- pluginService = new DefaultPluginServiceImpl(easyantIvyInstance);
- project.addReference(EasyAntMagicNames.PLUGIN_SERVICE_INSTANCE,
- pluginService);
-
- }
-
- /**
- * Adds the listeners specified in the command line arguments, along with
- * the default listener, to the specified project.
- *
- * @param project
- * The project to add listeners to. Must not be <code>null</code>
- * .
- */
- protected void addBuildListeners(Project project) {
-
- // Add the default listener
- project.addBuildListener(createLogger());
-
- for (int i = 0; i < configuration.getListeners().size(); i++) {
- String className = (String) configuration.getListeners().elementAt(
- i);
- BuildListener listener = (BuildListener) ClasspathUtils
- .newInstance(className, EasyAntEngine.class
- .getClassLoader(), BuildListener.class);
- project.setProjectReference(listener);
-
- project.addBuildListener(listener);
- }
- }
-
- /**
- * Creates the InputHandler and adds it to the project.
- *
- * @param project
- * the project instance.
- *
- * @exception BuildException
- * if a specified InputHandler implementation could not be
- * loaded.
- */
- protected void addInputHandler(Project project) {
- InputHandler handler = null;
-
- if (configuration.getInputHandlerClassname() == null) {
- handler = new DefaultInputHandler();
- } else {
- handler = (InputHandler) ClasspathUtils.newInstance(configuration
- .getInputHandlerClassname(), Main.class.getClassLoader(),
- InputHandler.class);
- project.setProjectReference(handler);
- }
- project.setInputHandler(handler);
- }
-
- /**
- * Creates the default build logger for sending build events to the ant log.
- *
- * @return the logger instance for this build.
- */
- protected BuildLogger createLogger() {
- BuildLogger logger = null;
- if (configuration.getLoggerClassname() != null) {
- try {
- logger = (BuildLogger) ClasspathUtils.newInstance(configuration
- .getLoggerClassname(), EasyAntEngine.class
- .getClassLoader(), BuildLogger.class);
- } catch (BuildException e) {
- throw new RuntimeException("The specified logger class "
- + configuration.getLoggerClassname()
- + " could not be used because " + e.getMessage(), e);
- }
- } else {
- logger = new DefaultEasyAntLogger();
- }
-
- logger.setMessageOutputLevel(configuration.getMsgOutputLevel());
- logger.setOutputPrintStream(configuration.getOut());
- logger.setErrorPrintStream(configuration.getErr());
- logger.setEmacsMode(configuration.isEmacsMode());
-
- return logger;
- }
-
- /**
- * Search parent directories for the build file.
- * <p>
- * Takes the given target as a suffix to append to each parent directory in
- * search of a build file. Once the root of the file-system has been reached
- * an exception is thrown.
- *
- * @param start
- * Leaf directory of search. Must not be <code>null</code>.
- * @param suffix
- * Suffix filename to look for in parents. Must not be
- * <code>null</code>.
- *
- * @return A handle to the build file if one is found
- *
- * @exception BuildException
- * if no build file is found
- */
- protected File findBuildModule(String start, String suffix)
- throws BuildException {
- if (configuration.getMsgOutputLevel() >= Project.MSG_INFO) {
- System.out.println("Searching for " + suffix + " ...");
- }
-
- File parent = new File(new File(start).getAbsolutePath());
- File file = new File(parent, suffix);
-
- // check if the target file exists in the current directory
- while (!file.exists()) {
- // change to parent directory
- parent = parent.getParentFile();
-
- // if parent is null, then we are at the root of the fs,
- // complain that we can't find the build file.
- if (parent == null) {
- throw new BuildException("Could not locate a build file!");
- }
-
- // refresh our file handle
- file = new File(parent, suffix);
- }
-
- return file;
- }
-
- /**
- * configure a given project with current configuration
- *
- * @param project
- * a given project
- * @throws BuildException
- */
- public void configureProject(Project project) throws BuildException {
-
- addBuildListeners(project);
- addInputHandler(project);
-
- // set the thread priorities
- if (configuration.getThreadPriority() != null) {
- try {
- project.log("Setting Ant's thread priority to "
- + configuration.getThreadPriority(),
- Project.MSG_VERBOSE);
- Thread.currentThread().setPriority(
- configuration.getThreadPriority().intValue());
- } catch (SecurityException swallowed) {
- // we cannot set the priority here.
- project
- .log("A security manager refused to set the -nice value");
- }
- }
-
- project.setKeepGoingMode(configuration.isKeepGoingMode());
- if (configuration.isProxy()) {
- // proxy setup if enabledcoreLoader
- ProxySetup proxySetup = new ProxySetup(project);
- proxySetup.enableProxies();
- }
-
- project.setName("EasyAnt");
-
- }
-
- /**
- * Initialize an easyant Project
- *
- * @param project
- */
- public void initProject(Project project) {
- project.init();
- // set user-define properties
- Enumeration e = configuration.getDefinedProps().keys();
- while (e.hasMoreElements()) {
- String arg = (String) e.nextElement();
- String value = (String) configuration.getDefinedProps().get(arg);
- project.setUserProperty(arg, value);
+ /**
+ * Default constructor will initialize the default configuration
+ */
+ public EasyAntEngine() {
+ this(EasyantConfigurationFactory.getInstance()
+ .createDefaultConfiguration());
+ }
+
+ /**
+ * Constructor if you want to use a custom configuration
+ *
+ * @param configuration
+ */
+ public EasyAntEngine(final EasyAntConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+ /**
+ * Configure easyant ivy instance
+ *
+ * @param project
+ * project instance
+ * @return a configured {@link Ivy} instance
+ */
+ protected Ivy configureEasyAntIvyInstance(Project project) {
+ IvyConfigure easyantIvyConfigure = new IvyConfigure();
+ easyantIvyConfigure
+ .setSettingsId(EasyAntMagicNames.EASYANT_IVY_INSTANCE);
+
+ project
+ .setNewProperty(
+ EasyAntMagicNames.EASYANT_DEFAULT_IVYSETTINGS,
+ this
+ .getClass()
+ .getResource(
+ "/org/apache/easyant/core/default-easyant-ivysettings.xml")
+ .toExternalForm());
+ project
+ .setNewProperty(
+ EasyAntMagicNames.EASYANT_EXTRA_IVYSETTINGS,
+ this
+ .getClass()
+ .getResource(
+ "/org/apache/easyant/core/extra-easyant-ivysettings.xml")
+ .toExternalForm());
+
+ project.setNewProperty(EasyAntMagicNames.EASYANT_CORE_REPO_URL, this
+ .getClass().getResource(
+ "/org/apache/easyant/core/repository/modules")
+ .toExternalForm());
+ if (this.getClass().getResource(
+ "/org/apache/easyant/repository/extra-modules") != null) {
+ project.setNewProperty(EasyAntMagicNames.EASYANT_EXTRA_REPO_URL,
+ this.getClass().getResource(
+ "/org/apache/easyant/repository/extra-modules")
+ .toExternalForm());
+ }
+
+ File userSettings = getUserEasyAntIvySettings(project);
+ String globalSettings = getGlobalEasyAntIvySettings(project);
+ boolean isIgnoringUserIvysettings=Project.toBoolean(project.getProperty(EasyAntMagicNames.IGNORE_USER_IVYSETTINGS));
+
+ if (userSettings.exists() && !isIgnoringUserIvysettings) {
+ project.log("loading user's easyant ivysettings file from "
+ + userSettings.getAbsolutePath(),Project.MSG_DEBUG);
+ easyantIvyConfigure.setFile(userSettings);
+ } else if (globalSettings != null) {
+ project.log("loading global easyant ivysettings file from "
+ + globalSettings,Project.MSG_DEBUG);
+ try {
+ easyantIvyConfigure.setUrl(globalSettings);
+ } catch (MalformedURLException malformedUrl) {
+ throw new BuildException(
+ "Unable to parse easyant ivysettings from the following url : "
+ + globalSettings, malformedUrl);
+ }
+
+ } else {
+ project.log("using easyant default ivy settings file",
+ Project.MSG_VERBOSE);
+ String url = project
+ .getProperty(EasyAntMagicNames.EASYANT_DEFAULT_IVYSETTINGS);
+ try {
+ easyantIvyConfigure.setUrl(url);
+ } catch (MalformedURLException malformedUrl) {
+ throw new BuildException(
+ "Unable to parse easyant ivysettings from the following url : "
+ + url, malformedUrl);
+ }
+ }
+ easyantIvyConfigure.setProject(project);
+ easyantIvyConfigure.setTaskName("configure-easyant");
+ easyantIvyConfigure.execute();
+
+ IvyAntSettings ivyAntSettings = IvyInstanceHelper
+ .getEasyAntIvyAntSettings(project);
+ return ivyAntSettings.getConfiguredIvyInstance(easyantIvyConfigure);
+ }
+
+ /**
+ * Get user easyant-ivysettings file
+ *
+ * @param project
+ * @return the configured user easyant-ivysettings.file
+ */
+ private File getUserEasyAntIvySettings(Project project) {
+ // path can be specified through a property
+ String path = project
+ .getProperty(EasyAntMagicNames.USER_EASYANT_IVYSETTINGS);
+ // if no property is set check the default location
+ if (path == null) {
+ path = PropertyHelper.getPropertyHelper(project).replaceProperties(
+ EasyAntConstants.DEFAULT_USER_EASYANT_IVYSETTINGS);
+ }
+ project.log("user's easyant-ivysettings file : " + path,
+ Project.MSG_DEBUG);
+ return new File(path);
+ }
+
+ /**
+ * Get global easyant-ivysettings file
+ *
+ * @param project
+ * @return the configured global easyant-ivysettings.file
+ */
+ private String getGlobalEasyAntIvySettings(Project project) {
+ PropertyHelper helper = PropertyHelper.getPropertyHelper(project);
+ String path=null;
+ if (configuration.getEasyantIvySettingsFile() != null) {
+ File f = new File(helper.replaceProperties(configuration.getEasyantIvySettingsFile()));
+ try {
+ path = f.toURL().toExternalForm();
+ } catch (MalformedURLException e) {
+ throw new BuildException("Can't load easyant ivysettings file from "+ f.getAbsolutePath());
+ }
+ }
+ if (configuration.getEasyantIvySettingsUrl() != null) {
+ path = helper.replaceProperties(configuration.getEasyantIvySettingsUrl());
+ }
+ // path can be specified through a property
+ if (path==null && project.getProperty(EasyAntMagicNames.GLOBAL_EASYANT_IVYSETTINGS) != null) {
+ path = project
+ .getProperty(EasyAntMagicNames.GLOBAL_EASYANT_IVYSETTINGS);
+ }
+ // if no property is set check the default location
+ if (path == null) {
+ path = helper.replaceProperties(
+ EasyAntConstants.DEFAULT_GLOBAL_EASYANT_IVYSETTINGS);
+ }
+ project.log("global easyant-ivysettings file : " + path,
+ Project.MSG_DEBUG);
+ return path;
+ }
+
+ protected void configurePluginService(Project project,
+ Ivy easyantIvyInstance) {
+ pluginService = new DefaultPluginServiceImpl(easyantIvyInstance);
+ project.addReference(EasyAntMagicNames.PLUGIN_SERVICE_INSTANCE,
+ pluginService);
+
+ }
+
+ /**
+ * Adds the listeners specified in the command line arguments, along with
+ * the default listener, to the specified project.
+ *
+ * @param project
+ * The project to add listeners to. Must not be <code>null</code>
+ * .
+ */
+ protected void addBuildListeners(Project project) {
+
+ // Add the default listener
+ project.addBuildListener(createLogger());
+
+ for (int i = 0; i < configuration.getListeners().size(); i++) {
+ String className = (String) configuration.getListeners().elementAt(
+ i);
+ BuildListener listener = (BuildListener) ClasspathUtils
+ .newInstance(className, EasyAntEngine.class
+ .getClassLoader(), BuildListener.class);
+ project.setProjectReference(listener);
+
+ project.addBuildListener(listener);
+ }
+ }
+
+ /**
+ * Creates the InputHandler and adds it to the project.
+ *
+ * @param project
+ * the project instance.
+ *
+ * @exception BuildException
+ * if a specified InputHandler implementation could not be
+ * loaded.
+ */
+ protected void addInputHandler(Project project) {
+ InputHandler handler = null;
+
+ if (configuration.getInputHandlerClassname() == null) {
+ handler = new DefaultInputHandler();
+ } else {
+ handler = (InputHandler) ClasspathUtils.newInstance(configuration
+ .getInputHandlerClassname(), Main.class.getClassLoader(),
+ InputHandler.class);
+ project.setProjectReference(handler);
+ }
+ project.setInputHandler(handler);
+ }
+
+ /**
+ * Creates the default build logger for sending build events to the ant log.
+ *
+ * @return the logger instance for this build.
+ */
+ protected BuildLogger createLogger() {
+ BuildLogger logger = null;
+ if (configuration.getLoggerClassname() != null) {
+ try {
+ logger = (BuildLogger) ClasspathUtils.newInstance(configuration
+ .getLoggerClassname(), EasyAntEngine.class
+ .getClassLoader(), BuildLogger.class);
+ } catch (BuildException e) {
+ throw new RuntimeException("The specified logger class "
+ + configuration.getLoggerClassname()
+ + " could not be used because " + e.getMessage(), e);
+ }
+ } else {
+ logger = new DefaultEasyAntLogger();
+ }
+
+ logger.setMessageOutputLevel(configuration.getMsgOutputLevel());
+ logger.setOutputPrintStream(configuration.getOut());
+ logger.setErrorPrintStream(configuration.getErr());
+ logger.setEmacsMode(configuration.isEmacsMode());
+
+ return logger;
+ }
+
+ /**
+ * Search parent directories for the build file.
+ * <p>
+ * Takes the given target as a suffix to append to each parent directory in
+ * search of a build file. Once the root of the file-system has been reached
+ * an exception is thrown.
+ *
+ * @param start
+ * Leaf directory of search. Must not be <code>null</code>.
+ * @param suffix
+ * Suffix filename to look for in parents. Must not be
+ * <code>null</code>.
+ *
+ * @return A handle to the build file if one is found
+ *
+ * @exception BuildException
+ * if no build file is found
+ */
+ protected File findBuildModule(String start, String suffix)
+ throws BuildException {
+ if (configuration.getMsgOutputLevel() >= Project.MSG_INFO) {
+ System.out.println("Searching for " + suffix + " ...");
+ }
+
+ File parent = new File(new File(start).getAbsolutePath());
+ File file = new File(parent, suffix);
+
+ // check if the target file exists in the current directory
+ while (!file.exists()) {
+ // change to parent directory
+ parent = parent.getParentFile();
+
+ // if parent is null, then we are at the root of the fs,
+ // complain that we can't find the build file.
+ if (parent == null) {
+ throw new BuildException("Could not locate a build file!");
+ }
+
+ // refresh our file handle
+ file = new File(parent, suffix);
+ }
+
+ return file;
+ }
+
+ /**
+ * configure a given project with current configuration
+ *
+ * @param project
+ * a given project
+ * @throws BuildException
+ */
+ public void configureProject(Project project) throws BuildException {
+
+ addBuildListeners(project);
+ addInputHandler(project);
+
+ // set the thread priorities
+ if (configuration.getThreadPriority() != null) {
+ try {
+ project.log("Setting Ant's thread priority to "
+ + configuration.getThreadPriority(),
+ Project.MSG_VERBOSE);
+ Thread.currentThread().setPriority(
+ configuration.getThreadPriority().intValue());
+ } catch (SecurityException swallowed) {
+ // we cannot set the priority here.
+ project
+ .log("A security manager refused to set the -nice value");
+ }
+ }
+
+ project.setKeepGoingMode(configuration.isKeepGoingMode());
+ if (configuration.isProxy()) {
+ // proxy setup if enabledcoreLoader
+ ProxySetup proxySetup = new ProxySetup(project);
+ proxySetup.enableProxies();
+ }
+
+ project.setName("EasyAnt");
+
+ }
+
+ /**
+ * Initialize an easyant Project
+ *
+ * @param project
+ */
+ public void initProject(Project project) {
+ project.init();
+ // set user-define properties
+ Enumeration e = configuration.getDefinedProps().keys();
+ while (e.hasMoreElements()) {
+ String arg = (String) e.nextElement();
+ String value = (String) configuration.getDefinedProps().get(arg);
+ project.setUserProperty(arg, value);
}
project.setUserProperty(EasyAntMagicNames.EASYANT_OFFLINE, Boolean.toString(configuration.isOffline()));
- File buildModule = configuration.getBuildModule();
- File buildFile = configuration.getBuildFile();
+ File buildModule = configuration.getBuildModule();
+ File buildFile = configuration.getBuildFile();
+
+ if (buildModule == null) {
+ buildModule = new File(EasyAntConstants.DEFAULT_BUILD_MODULE);
+ }
- if (buildModule == null) {
- buildModule = new File(EasyAntConstants.DEFAULT_BUILD_MODULE);
- }
-
- if (!buildModule.exists() && configuration.isBuildModuleLookupEnabled()) {
- buildModule = findBuildModule(System.getProperty("user.dir"),
- buildModule.toString());
- }
-
- // calculate buildFile location based on buildModule directory
- if (buildModule.exists() && buildFile == null) {
- buildFile = new File(buildModule.getParentFile(),
- EasyAntConstants.DEFAULT_BUILD_FILE);
- }
-
- if (buildFile == null && configuration.isBuildModuleLookupEnabled()) {
- buildFile = findBuildModule(System.getProperty("user.dir"),
- EasyAntConstants.DEFAULT_BUILD_FILE);
- }
-
- // Normalize buildFile for re-import detection
- if (buildModule != null) {
- buildModule = FileUtils.getFileUtils().normalize(
- buildModule.getAbsolutePath());
- project.setNewProperty(EasyAntMagicNames.EASYANT_FILE, buildModule
- .getAbsolutePath());
-
- }
-
- if (buildFile != null) {
- buildFile = FileUtils.getFileUtils().normalize(
- buildFile.getAbsolutePath());
- project.setNewProperty(MagicNames.ANT_FILE, buildFile
- .getAbsolutePath());
-
- }
-
- configuration.setBuildFile(buildFile);
- configuration.setBuildModule(buildModule);
-
- // Emulate an empty project
- // import task check that projectHelper is at toplevel by checking the
- // size of projectHelper.getImportTask()
- ProjectHelper helper = ProjectHelper.getProjectHelper();
- File mainscript = null;
- try {
- mainscript = File.createTempFile(
- EasyAntConstants.EASYANT_TASK_NAME, null);
- mainscript.deleteOnExit();
- } catch (IOException e1) {
- throw new BuildException("Can't create temp file", e1);
- }
-
- Location mainscriptLocation = new Location(mainscript.toString());
- helper.getImportStack().addElement(mainscript);
- project.addReference(ProjectHelper.PROJECTHELPER_REFERENCE, helper);
-
- // Used to emulate top level target
- Target topLevel = new Target();
- topLevel.setName("");
-
- // Validate Phase is used by several system plugin so we should
- // initialize it
- Phase validatePhase = new Phase();
- validatePhase.setName("validate");
- validatePhase
- .setDescription("validate the project is correct and all necessary information is available");
- project.addTarget("validate", validatePhase);
-
- Ivy easyantIvyInstance = configureEasyAntIvyInstance(project);
- configurePluginService(project, easyantIvyInstance);
-
- // Profile
- if (configuration.getActiveBuildConfigurations().size() != 0) {
- String buildConfigurations = null;
- for (String conf : configuration.getActiveBuildConfigurations()) {
- if (buildConfigurations == null) {
- buildConfigurations = conf;
- } else {
- buildConfigurations = buildConfigurations + "," + conf;
- }
-
- }
- project.log("Active build configurations : " + buildConfigurations,
- Project.MSG_INFO);
- project.setProperty(EasyAntMagicNames.ACTIVE_BUILD_CONFIGURATIONS,
- buildConfigurations);
- }
-
- // Load system plugins
- if (configuration.getSystemPlugins().size() > 0) {
- project.log("Loading System Plugins...");
- }
- for (PluginDescriptor systemPlugin : configuration.getSystemPlugins()) {
- // import/include system plugin
- Import importTask = new Import();
- importTask.setMrid(systemPlugin.getMrid());
- importTask.setOrganisation(systemPlugin.getOrganisation());
- importTask.setModule(systemPlugin.getModule());
- importTask.setRevision(systemPlugin.getRevision());
- importTask.setAs(systemPlugin.getAs());
- importTask.setMode(systemPlugin.getMode());
- importTask.setMandatory(systemPlugin.isMandatory());
- importTask.setProject(project);
- importTask.setTaskName(EasyAntConstants.EASYANT_TASK_NAME);
- importTask.setOwningTarget(topLevel);
- importTask.setLocation(mainscriptLocation);
- importTask.execute();
- }
-
- if (configuration.getBuildModule() != null
- || configuration.getBuildFile() != null) {
- LoadModule lm = new LoadModule();
- lm.setBuildModule(configuration.getBuildModule());
- lm.setBuildFile(configuration.getBuildFile());
- lm.setTaskName(EasyAntConstants.EASYANT_TASK_NAME);
- lm.setProject(project);
- lm.setOwningTarget(topLevel);
- lm.setLocation(mainscriptLocation);
- lm.execute();
- }
- }
-
- /**
- * this method run the build process
- *
- * @throws BuildException
- */
- public void doBuild() throws BuildException {
- final Project project = new Project();
- project.fireBuildStarted();
-
- Throwable error = null;
-
- try {
-
- PrintStream savedErr = System.err;
- PrintStream savedOut = System.out;
- InputStream savedIn = System.in;
-
- // use a system manager that prevents from System.exit()
- SecurityManager oldsm = null;
- oldsm = System.getSecurityManager();
-
- // SecurityManager can not be installed here for backwards
- // compatibility reasons (PD). Needs to be loaded prior to
- // ant class if we are going to implement it.
- // System.setSecurityManager(new NoExitSecurityManager());
- try {
- if (configuration.isAllowInput()) {
- project.setDefaultInputStream(System.in);
- }
- System.setIn(new DemuxInputStream(project));
- System.setOut(new PrintStream(new DemuxOutputStream(project,
- false)));
- System.setErr(new PrintStream(new DemuxOutputStream(project,
- true)));
- configureProject(project);
- initProject(project);
-
- // make sure that we have a target to execute
- if (configuration.getTargets().size() == 0) {
- if (project.getDefaultTarget() != null) {
- configuration.getTargets().addElement(
- project.getDefaultTarget());
- }
- }
-
- project.executeTargets(configuration.getTargets());
- } finally {
- // put back the original security manager
- // The following will never eval to true. (PD)
- if (oldsm != null) {
- System.setSecurityManager(oldsm);
- }
-
- System.setOut(savedOut);
- System.setErr(savedErr);
- System.setIn(savedIn);
- }
- } catch (RuntimeException exc) {
- error = exc;
- throw exc;
- } catch (Error e) {
- error = e;
- throw e;
- } finally {
- try {
- project.fireBuildFinished(error);
- } catch (Throwable t) {
- // yes, I know it is bad style to catch Throwable,
- // but if we don't, we lose valuable information
- System.err.println("Caught an exception while logging the"
- + " end of the build. Exception was:");
- t.printStackTrace();
- if (error != null) {
- System.err.println("There has been an error prior to"
- + " that:");
- error.printStackTrace();
- }
- throw new BuildException(t);
- }
- }
- if (configuration.isShowMemoryDetails()
- || configuration.getMsgOutputLevel() >= Project.MSG_VERBOSE) {
- printMemoryDetails(project);
- }
-
- }
-
- /**
- * This is a static method used to run build process
- *
- * @param eaConfig
- * an easyant configuration
- * @throws BuildException
- */
- public static void runBuild(EasyAntConfiguration eaConfig)
- throws BuildException {
- EasyAntEngine eaEngine = new EasyAntEngine(eaConfig);
- eaEngine.doBuild();
- }
-
- /**
- * This is a static method used to configure and initialize an existing
- * project
- *
- * @param project
- * a given project
- * @param eaConfiguration
- * an easyant configuration
- * @return configured project
- * @throws BuildException
- */
- public static Project configureAndInitProject(Project project,
- EasyAntConfiguration eaConfiguration) throws BuildException {
- EasyAntEngine eaEngine = new EasyAntEngine(eaConfiguration);
- eaEngine.configureProject(project);
- eaEngine.initProject(project);
- return project;
- }
-
- /**
- * Print memory details
- *
- * @param project
- * a given project
- */
- public static void printMemoryDetails(Project project) {
- project.log("---- Memory Details ----");
- project.log(" Used Memory = "
- + (Runtime.getRuntime().totalMemory() / MEGABYTE - Runtime
- .getRuntime().freeMemory()
- / MEGABYTE) + "MB");
- project.log(" Free Memory = "
- + (Runtime.getRuntime().freeMemory() / MEGABYTE) + "MB");
- project.log(" Total Memory = "
- + (Runtime.getRuntime().totalMemory() / MEGABYTE) + "MB");
- project.log("-----------------------");
- }
-
- /**
- * Return the configured plugin service instance
- *
- * @return the configured plugin service instance
- */
- public PluginService getPluginService() {
- // hack for IDE integration
- if (pluginService == null) {
- Project project = new Project();
- project.setCoreLoader(configuration.getCoreLoader());
- Enumeration<?> e = configuration.getDefinedProps().keys();
- while (e.hasMoreElements()) {
- String arg = (String) e.nextElement();
- String value = (String) configuration.getDefinedProps()
- .get(arg);
- project.setUserProperty(arg, value);
- }
- project.setName("EasyAnt");
- // not sure we need to invoke init here
- project.init();
- Ivy ivy = configureEasyAntIvyInstance(project);
- configurePluginService(project, ivy);
- }
- return pluginService;
- }
-
- /**
- * Cache of the EasyAnt version information when it has been loaded.
- */
- private static String easyantVersion = null;
-
- /**
- * Returns the EasyAnt version information, if available. Once the
- * information has been loaded once, it's cached and returned from the cache
- * on future calls.
- *
- * @return the Ant version information as a String (always non-
- * <code>null</code>)
- *
- * @exception BuildException
- * if the version information is unavailable
- */
- public static String getEasyAntVersion() {
-
- if (easyantVersion == null) {
- try {
- Properties props = new Properties();
- InputStream in = Main.class
- .getResourceAsStream("/META-INF/version.properties");
- props.load(in);
- in.close();
-
- StringBuffer msg = new StringBuffer();
- msg.append("EasyAnt version ");
- msg.append(props.getProperty("VERSION"));
- msg.append(" compiled on ");
- msg.append(props.getProperty("DATE"));
- easyantVersion = msg.toString();
- } catch (IOException ioe) {
- throw new BuildException(
- "Could not load the version information:"
- + ioe.getMessage());
- } catch (NullPointerException npe) {
- throw new BuildException(
- "Could not load the version information.");
- }
- }
- return easyantVersion;
- }
+ if (!buildModule.exists() && configuration.isBuildModuleLookupEnabled()) {
+ buildModule = findBuildModule(System.getProperty("user.dir"),
+ buildModule.toString());
+ }
+
+ // calculate buildFile location based on buildModule directory
+ if (buildModule.exists() && buildFile == null) {
+ buildFile = new File(buildModule.getParentFile(),
+ EasyAntConstants.DEFAULT_BUILD_FILE);
+ }
+
+ if (buildFile == null && configuration.isBuildModuleLookupEnabled()) {
+ buildFile = findBuildModule(System.getProperty("user.dir"),
+ EasyAntConstants.DEFAULT_BUILD_FILE);
+ }
+
+ // Normalize buildFile for re-import detection
+ if (buildModule != null) {
+ buildModule = FileUtils.getFileUtils().normalize(
+ buildModule.getAbsolutePath());
+ project.setNewProperty(EasyAntMagicNames.EASYANT_FILE, buildModule
+ .getAbsolutePath());
+
+ }
+
+ if (buildFile != null) {
+ buildFile = FileUtils.getFileUtils().normalize(
+ buildFile.getAbsolutePath());
+ project.setNewProperty(MagicNames.ANT_FILE, buildFile
+ .getAbsolutePath());
+
+ }
+
+ configuration.setBuildFile(buildFile);
+ configuration.setBuildModule(buildModule);
+
+ // Emulate an empty project
+ // import task check that projectHelper is at toplevel by checking the
+ // size of projectHelper.getImportTask()
+ ProjectHelper helper = ProjectHelper.getProjectHelper();
+ File mainscript = null;
+ try {
+ mainscript = File.createTempFile(
+ EasyAntConstants.EASYANT_TASK_NAME, null);
+ mainscript.deleteOnExit();
+ } catch (IOException e1) {
+ throw new BuildException("Can't create temp file", e1);
+ }
+
+ Location mainscriptLocation = new Location(mainscript.toString());
+ helper.getImportStack().addElement(mainscript);
+ project.addReference(ProjectHelper.PROJECTHELPER_REFERENCE, helper);
+
+ // Used to emulate top level target
+ Target topLevel = new Target();
+ topLevel.setName("");
+
+ // Validate Phase is used by several system plugin so we should
+ // initialize it
+ Phase validatePhase = new Phase();
+ validatePhase.setName("validate");
+ validatePhase
+ .setDescription("validate the project is correct and all necessary information is available");
+ project.addTarget("validate", validatePhase);
+
+ Ivy easyantIvyInstance = configureEasyAntIvyInstance(project);
+ configurePluginService(project, easyantIvyInstance);
+
+ // Profile
+ if (configuration.getActiveBuildConfigurations().size() != 0) {
+ String buildConfigurations = null;
+ for (String conf : configuration.getActiveBuildConfigurations()) {
+ if (buildConfigurations == null) {
+ buildConfigurations = conf;
+ } else {
+ buildConfigurations = buildConfigurations + "," + conf;
+ }
+
+ }
+ project.log("Active build configurations : " + buildConfigurations,
+ Project.MSG_INFO);
+ project.setProperty(EasyAntMagicNames.ACTIVE_BUILD_CONFIGURATIONS,
+ buildConfigurations);
+ }
+
+ // Load system plugins
+ if (configuration.getSystemPlugins().size() > 0) {
+ project.log("Loading System Plugins...");
+ }
+ for (PluginDescriptor systemPlugin : configuration.getSystemPlugins()) {
+ // import/include system plugin
+ Import importTask = new Import();
+ importTask.setMrid(systemPlugin.getMrid());
+ importTask.setOrganisation(systemPlugin.getOrganisation());
+ importTask.setModule(systemPlugin.getModule());
+ importTask.setRevision(systemPlugin.getRevision());
+ importTask.setAs(systemPlugin.getAs());
+ importTask.setMode(systemPlugin.getMode());
+ importTask.setMandatory(systemPlugin.isMandatory());
+ importTask.setProject(project);
+ importTask.setTaskName(EasyAntConstants.EASYANT_TASK_NAME);
+ importTask.setOwningTarget(topLevel);
+ importTask.setLocation(mainscriptLocation);
+ importTask.execute();
+ }
+
+ if (configuration.getBuildModule() != null
+ || configuration.getBuildFile() != null) {
+ LoadModule lm = new LoadModule();
+ lm.setBuildModule(configuration.getBuildModule());
+ lm.setBuildFile(configuration.getBuildFile());
+ lm.setTaskName(EasyAntConstants.EASYANT_TASK_NAME);
+ lm.setProject(project);
+ lm.setOwningTarget(topLevel);
+ lm.setLocation(mainscriptLocation);
+ lm.execute();
+ }
+ }
+
+ /**
+ * this method run the build process
+ *
+ * @throws BuildException
+ */
+ public void doBuild() throws BuildException {
+ final Project project = new Project();
+ project.fireBuildStarted();
+
+ Throwable error = null;
+
+ try {
+
+ PrintStream savedErr = System.err;
+ PrintStream savedOut = System.out;
+ InputStream savedIn = System.in;
+
+ // use a system manager that prevents from System.exit()
+ SecurityManager oldsm = null;
+ oldsm = System.getSecurityManager();
+
+ // SecurityManager can not be installed here for backwards
+ // compatibility reasons (PD). Needs to be loaded prior to
+ // ant class if we are going to implement it.
+ // System.setSecurityManager(new NoExitSecurityManager());
+ try {
+ if (configuration.isAllowInput()) {
+ project.setDefaultInputStream(System.in);
+ }
+ System.setIn(new DemuxInputStream(project));
+ System.setOut(new PrintStream(new DemuxOutputStream(project,
+ false)));
+ System.setErr(new PrintStream(new DemuxOutputStream(project,
+ true)));
+ configureProject(project);
+ initProject(project);
+
+ // make sure that we have a target to execute
+ if (configuration.getTargets().size() == 0) {
+ if (project.getDefaultTarget() != null) {
+ configuration.getTargets().addElement(
+ project.getDefaultTarget());
+ }
+ }
+
+ project.executeTargets(configuration.getTargets());
+ } finally {
+ // put back the original security manager
+ // The following will never eval to true. (PD)
+ if (oldsm != null) {
+ System.setSecurityManager(oldsm);
+ }
+
+ System.setOut(savedOut);
+ System.setErr(savedErr);
+ System.setIn(savedIn);
+ }
+ } catch (RuntimeException exc) {
+ error = exc;
+ throw exc;
+ } catch (Error e) {
+ error = e;
+ throw e;
+ } finally {
+ try {
+ project.fireBuildFinished(error);
+ } catch (Throwable t) {
+ // yes, I know it is bad style to catch Throwable,
+ // but if we don't, we lose valuable information
+ System.err.println("Caught an exception while logging the"
+ + " end of the build. Exception was:");
+ t.printStackTrace();
+ if (error != null) {
+ System.err.println("There has been an error prior to"
+ + " that:");
+ error.printStackTrace();
+ }
+ throw new BuildException(t);
+ }
+ }
+ if (configuration.isShowMemoryDetails()
+ || configuration.getMsgOutputLevel() >= Project.MSG_VERBOSE) {
+ printMemoryDetails(project);
+ }
+
+ }
+
+ /**
+ * This is a static method used to run build process
+ *
+ * @param eaConfig
+ * an easyant configuration
+ * @throws BuildException
+ */
+ public static void runBuild(EasyAntConfiguration eaConfig)
+ throws BuildException {
+ EasyAntEngine eaEngine = new EasyAntEngine(eaConfig);
+ eaEngine.doBuild();
+ }
+
+ /**
+ * This is a static method used to configure and initialize an existing
+ * project
+ *
+ * @param project
+ * a given project
+ * @param eaConfiguration
+ * an easyant configuration
+ * @return configured project
+ * @throws BuildException
+ */
+ public static Project configureAndInitProject(Project project,
+ EasyAntConfiguration eaConfiguration) throws BuildException {
+ EasyAntEngine eaEngine = new EasyAntEngine(eaConfiguration);
+ eaEngine.configureProject(project);
+ eaEngine.initProject(project);
+ return project;
+ }
+
+ /**
+ * Print memory details
+ *
+ * @param project
+ * a given project
+ */
+ public static void printMemoryDetails(Project project) {
+ project.log("---- Memory Details ----");
+ project.log(" Used Memory = "
+ + (Runtime.getRuntime().totalMemory() / MEGABYTE - Runtime
+ .getRuntime().freeMemory()
+ / MEGABYTE) + "MB");
+ project.log(" Free Memory = "
+ + (Runtime.getRuntime().freeMemory() / MEGABYTE) + "MB");
+ project.log(" Total Memory = "
+ + (Runtime.getRuntime().totalMemory() / MEGABYTE) + "MB");
+ project.log("-----------------------");
+ }
+
+ /**
+ * Return the configured plugin service instance
+ *
+ * @return the configured plugin service instance
+ */
+ public PluginService getPluginService() {
+ // hack for IDE integration
+ if (pluginService == null) {
+ Project project = new Project();
+ project.setCoreLoader(configuration.getCoreLoader());
+ Enumeration<?> e = configuration.getDefinedProps().keys();
+ while (e.hasMoreElements()) {
+ String arg = (String) e.nextElement();
+ String value = (String) configuration.getDefinedProps()
+ .get(arg);
+ project.setUserProperty(arg, value);
+ }
+ project.setName("EasyAnt");
+ // not sure we need to invoke init here
+ project.init();
+ Ivy ivy = configureEasyAntIvyInstance(project);
+ configurePluginService(project, ivy);
+ }
+ return pluginService;
+ }
+
+ /**
+ * Cache of the EasyAnt version information when it has been loaded.
+ */
+ private static String easyantVersion = null;
+
+ /**
+ * Returns the EasyAnt version information, if available. Once the
+ * information has been loaded once, it's cached and returned from the cache
+ * on future calls.
+ *
+ * @return the Ant version information as a String (always non-
+ * <code>null</code>)
+ *
+ * @exception BuildException
+ * if the version information is unavailable
+ */
+ public static String getEasyAntVersion() {
+
+ if (easyantVersion == null) {
+ try {
+ Properties props = new Properties();
+ InputStream in = Main.class
+ .getResourceAsStream("/META-INF/version.properties");
+ props.load(in);
+ in.close();
+
+ StringBuffer msg = new StringBuffer();
+ msg.append("EasyAnt version ");
+ msg.append(props.getProperty("VERSION"));
+ msg.append(" compiled on ");
+ msg.append(props.getProperty("DATE"));
+ easyantVersion = msg.toString();
+ } catch (IOException ioe) {
+ throw new BuildException(
+ "Could not load the version information:"
+ + ioe.getMessage());
+ } catch (NullPointerException npe) {
+ throw new BuildException(
+ "Could not load the version information.");
+ }
+ }
+ return easyantVersion;
+ }
}