2 * Copyright (C) 2007-2012 Argeo GmbH
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.slc
.ant
;
19 import java
.util
.ArrayList
;
20 import java
.util
.HashMap
;
21 import java
.util
.List
;
23 import java
.util
.Vector
;
25 import org
.apache
.commons
.logging
.Log
;
26 import org
.apache
.commons
.logging
.LogFactory
;
27 import org
.apache
.tools
.ant
.BuildEvent
;
28 import org
.apache
.tools
.ant
.BuildListener
;
29 import org
.apache
.tools
.ant
.Project
;
30 import org
.apache
.tools
.ant
.ProjectHelper
;
31 import org
.apache
.tools
.ant
.helper
.ProjectHelper2
;
32 import org
.argeo
.slc
.SlcException
;
33 import org
.springframework
.core
.io
.Resource
;
35 public class AntRun
implements Runnable
{
36 private final static Log log
= LogFactory
.getLog(AntRun
.class);
38 private Resource buildFile
;
41 private List
<String
> targets
= new ArrayList
<String
>();
42 private Map
<Object
, Object
> properties
= new HashMap
<Object
, Object
>();
45 Project project
= new Project();
48 String path
= buildFile
.getURL().getPath();
49 project
.setUserProperty("ant.file", path
);
50 project
.setBaseDir(extractBaseDir(path
));
53 ProjectHelper projectHelper
= new ProjectHelper2();
54 project
.addReference(ProjectHelper
.PROJECTHELPER_REFERENCE
,
56 projectHelper
.parse(project
, buildFile
.getURL());
57 } catch (Exception e
) {
58 throw new SlcException("Could not parse " + buildFile
, e
);
61 if (properties
!= null) {
62 for (Map
.Entry
<Object
, Object
> entry
: properties
.entrySet()) {
63 project
.setUserProperty(entry
.getKey().toString(), entry
64 .getValue().toString());
68 project
.fireBuildStarted();
69 Throwable exception
= null;
71 project
.addBuildListener(new LoggingListener());
72 if (targets
.size() == 0) {
73 project
.executeTarget(project
.getDefaultTarget());
75 project
.executeTargets(new Vector
<String
>(targets
));
77 } catch (Throwable e
) {
79 throw new SlcException("Could not run Ant script " + buildFile
, e
);
81 project
.fireBuildFinished(exception
);
85 private File
extractBaseDir(String path
) {
86 if(this.baseDir
!=null)
89 String baseDir
= null;
90 if (path
.length() > 1) {
91 int indx
= path
.lastIndexOf('/', path
.length() - 1);
92 if (indx
== -1 || indx
== 0) {
95 baseDir
= path
.substring(0, indx
) + "/";
100 File file
= new File(baseDir
);
104 return new File(System
.getProperty("user.dir"));
108 public void setBuildFile(Resource buildFile
) {
109 this.buildFile
= buildFile
;
112 public void setTargets(List
<String
> targets
) {
113 this.targets
= targets
;
116 public void setProperties(Map
<Object
, Object
> properties
) {
117 this.properties
= properties
;
120 public void setBaseDir(File baseDir
) {
121 this.baseDir
= baseDir
;
124 protected static class LoggingListener
implements BuildListener
{
126 public void buildFinished(BuildEvent event
) {
127 if (log
.isDebugEnabled())
128 log
.debug("Ant build finished: " + event
);
131 public void buildStarted(BuildEvent event
) {
132 if (log
.isDebugEnabled())
133 log
.debug("Ant build started: " + event
);
136 public void messageLogged(BuildEvent event
) {
137 if (event
.getPriority() == Project
.MSG_DEBUG
) {
138 if (log
.isTraceEnabled())
139 log
.trace(event
.getMessage());
140 } else if (event
.getPriority() == Project
.MSG_VERBOSE
) {
141 if (log
.isDebugEnabled())
142 log
.debug(event
.getMessage());
143 } else if (event
.getPriority() == Project
.MSG_INFO
) {
144 log
.info(event
.getMessage());
146 } else if (event
.getPriority() == Project
.MSG_WARN
) {
147 log
.warn(event
.getMessage());
149 } else if (event
.getPriority() == Project
.MSG_ERR
) {
150 log
.error(event
.getMessage());
152 log
.error(event
.getMessage());
156 public void targetFinished(BuildEvent event
) {
157 if (log
.isTraceEnabled())
158 log
.debug("Target finished: " + event
.getTarget());
161 public void targetStarted(BuildEvent event
) {
162 if (log
.isTraceEnabled())
163 log
.debug("Target started: " + event
.getTarget());
166 public void taskFinished(BuildEvent event
) {
169 public void taskStarted(BuildEvent event
) {