1 package org
.argeo
.slc
.ant
;
4 import java
.util
.ArrayList
;
5 import java
.util
.HashMap
;
8 import java
.util
.Vector
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
12 import org
.apache
.tools
.ant
.BuildEvent
;
13 import org
.apache
.tools
.ant
.BuildListener
;
14 import org
.apache
.tools
.ant
.Project
;
15 import org
.apache
.tools
.ant
.ProjectHelper
;
16 import org
.apache
.tools
.ant
.helper
.ProjectHelper2
;
17 import org
.argeo
.slc
.SlcException
;
18 import org
.springframework
.core
.io
.Resource
;
20 public class AntRun
implements Runnable
{
21 private final static Log log
= LogFactory
.getLog(AntRun
.class);
23 private Resource buildFile
;
25 private List
<String
> targets
= new ArrayList
<String
>();
26 private Map
<Object
, Object
> properties
= new HashMap
<Object
, Object
>();
29 Project project
= new Project();
32 String path
= buildFile
.getURL().getPath();
33 project
.setUserProperty("ant.file", path
);
34 project
.setBaseDir(extractBaseDir(path
));
37 ProjectHelper projectHelper
= new ProjectHelper2();
38 project
.addReference(ProjectHelper
.PROJECTHELPER_REFERENCE
,
40 projectHelper
.parse(project
, buildFile
.getURL());
41 } catch (Exception e
) {
42 throw new SlcException("Could not parse " + buildFile
, e
);
45 if (properties
!= null) {
46 for (Map
.Entry
<Object
, Object
> entry
: properties
.entrySet()) {
47 project
.setUserProperty(entry
.getKey().toString(), entry
48 .getValue().toString());
52 project
.fireBuildStarted();
53 Throwable exception
= null;
55 project
.addBuildListener(new LoggingListener());
56 if (targets
.size() == 0) {
57 project
.executeTarget(project
.getDefaultTarget());
59 project
.executeTargets(new Vector
<String
>(targets
));
61 } catch (Throwable e
) {
63 throw new SlcException("Could not run Ant script " + buildFile
, e
);
65 project
.fireBuildFinished(exception
);
69 private File
extractBaseDir(String path
) {
70 String baseDir
= null;
71 if (path
.length() > 1) {
72 int indx
= path
.lastIndexOf('/', path
.length() - 1);
73 if (indx
== -1 || indx
== 0) {
76 baseDir
= path
.substring(0, indx
) + "/";
81 File file
= new File(baseDir
);
85 return new File(System
.getProperty("user.dir"));
89 public void setBuildFile(Resource buildFile
) {
90 this.buildFile
= buildFile
;
93 public void setTargets(List
<String
> targets
) {
94 this.targets
= targets
;
97 public void setProperties(Map
<Object
, Object
> properties
) {
98 this.properties
= properties
;
101 protected static class LoggingListener
implements BuildListener
{
103 public void buildFinished(BuildEvent event
) {
104 if (log
.isDebugEnabled())
105 log
.debug("Ant build finished: " + event
);
108 public void buildStarted(BuildEvent event
) {
109 if (log
.isDebugEnabled())
110 log
.debug("Ant build started: " + event
);
113 public void messageLogged(BuildEvent event
) {
114 if (event
.getPriority() == Project
.MSG_DEBUG
) {
115 if (log
.isTraceEnabled())
116 log
.trace(event
.getMessage());
117 } else if (event
.getPriority() == Project
.MSG_VERBOSE
) {
118 if (log
.isDebugEnabled())
119 log
.debug(event
.getMessage());
120 } else if (event
.getPriority() == Project
.MSG_INFO
) {
121 log
.info(event
.getMessage());
123 } else if (event
.getPriority() == Project
.MSG_WARN
) {
124 log
.warn(event
.getMessage());
126 } else if (event
.getPriority() == Project
.MSG_ERR
) {
127 log
.error(event
.getMessage());
129 log
.error(event
.getMessage());
133 public void targetFinished(BuildEvent event
) {
134 if (log
.isTraceEnabled())
135 log
.debug("Target finished: " + event
.getTarget());
138 public void targetStarted(BuildEvent event
) {
139 if (log
.isTraceEnabled())
140 log
.debug("Target started: " + event
.getTarget());
143 public void taskFinished(BuildEvent event
) {
146 public void taskStarted(BuildEvent event
) {