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
;
26 private List
<String
> targets
= new ArrayList
<String
>();
27 private Map
<Object
, Object
> properties
= new HashMap
<Object
, Object
>();
30 Project project
= new Project();
33 String path
= buildFile
.getURL().getPath();
34 project
.setUserProperty("ant.file", path
);
35 project
.setBaseDir(extractBaseDir(path
));
38 ProjectHelper projectHelper
= new ProjectHelper2();
39 project
.addReference(ProjectHelper
.PROJECTHELPER_REFERENCE
,
41 projectHelper
.parse(project
, buildFile
.getURL());
42 } catch (Exception e
) {
43 throw new SlcException("Could not parse " + buildFile
, e
);
46 if (properties
!= null) {
47 for (Map
.Entry
<Object
, Object
> entry
: properties
.entrySet()) {
48 project
.setUserProperty(entry
.getKey().toString(), entry
49 .getValue().toString());
53 project
.fireBuildStarted();
54 Throwable exception
= null;
56 project
.addBuildListener(new LoggingListener());
57 if (targets
.size() == 0) {
58 project
.executeTarget(project
.getDefaultTarget());
60 project
.executeTargets(new Vector
<String
>(targets
));
62 } catch (Throwable e
) {
64 throw new SlcException("Could not run Ant script " + buildFile
, e
);
66 project
.fireBuildFinished(exception
);
70 private File
extractBaseDir(String path
) {
71 if(this.baseDir
!=null)
74 String baseDir
= null;
75 if (path
.length() > 1) {
76 int indx
= path
.lastIndexOf('/', path
.length() - 1);
77 if (indx
== -1 || indx
== 0) {
80 baseDir
= path
.substring(0, indx
) + "/";
85 File file
= new File(baseDir
);
89 return new File(System
.getProperty("user.dir"));
93 public void setBuildFile(Resource buildFile
) {
94 this.buildFile
= buildFile
;
97 public void setTargets(List
<String
> targets
) {
98 this.targets
= targets
;
101 public void setProperties(Map
<Object
, Object
> properties
) {
102 this.properties
= properties
;
105 public void setBaseDir(File baseDir
) {
106 this.baseDir
= baseDir
;
109 protected static class LoggingListener
implements BuildListener
{
111 public void buildFinished(BuildEvent event
) {
112 if (log
.isDebugEnabled())
113 log
.debug("Ant build finished: " + event
);
116 public void buildStarted(BuildEvent event
) {
117 if (log
.isDebugEnabled())
118 log
.debug("Ant build started: " + event
);
121 public void messageLogged(BuildEvent event
) {
122 if (event
.getPriority() == Project
.MSG_DEBUG
) {
123 if (log
.isTraceEnabled())
124 log
.trace(event
.getMessage());
125 } else if (event
.getPriority() == Project
.MSG_VERBOSE
) {
126 if (log
.isDebugEnabled())
127 log
.debug(event
.getMessage());
128 } else if (event
.getPriority() == Project
.MSG_INFO
) {
129 log
.info(event
.getMessage());
131 } else if (event
.getPriority() == Project
.MSG_WARN
) {
132 log
.warn(event
.getMessage());
134 } else if (event
.getPriority() == Project
.MSG_ERR
) {
135 log
.error(event
.getMessage());
137 log
.error(event
.getMessage());
141 public void targetFinished(BuildEvent event
) {
142 if (log
.isTraceEnabled())
143 log
.debug("Target finished: " + event
.getTarget());
146 public void targetStarted(BuildEvent event
) {
147 if (log
.isTraceEnabled())
148 log
.debug("Target started: " + event
.getTarget());
151 public void taskFinished(BuildEvent event
) {
154 public void taskStarted(BuildEvent event
) {