Continuous Integration with Flex, Hudson, and ArcGIS Server, Part 2
(Part 1, Part 3, Part 4)
In the last post, I talked about the very basics of getting a Flex project going with Flex Builder and ant. The current ant script we have just builds the SWF file, which leaves out a bunch of files that Flex Builder uses, and that is bad as defined by what I am trying to blog about here. So, let’s get going on pulling over the rest of the files. Well, at least, the important ones. The most important one is likely the HTML file that wraps our SWF. If we are going to deploy this SWF in any meaningful (read: web) manner, we need that HTML file. Actually, we need one that we make ourselves and pull into our build process, but that will left as an assignment for the reader. For the sake of this series, we’ll just reuse the HTML file that Flex Builder was kind enough to generate.
In the default Flex Builder project, one of the folders is html-template, that looks like:
Not much to it, really. I am not gonna go into the meat of what the files are, if you want that go here. In a nutshell, what we need to do here is copy this whole directory to our output folder (our ${deploy.dir} for you sharp ones following along). There is a slight caveat here, tho, and that’s the contents of the index.template.html. If you open that file in a text editor, you’ll see snippets like:
where you may notice the now familiar ${} variables. So, now our simple copy has turned into a copy and replace all the ${} tokens with their appropriate values. Nothing is ever as simple as it should be.
The good news is that it’s not so hard either. Breaking down what we need to do, I think it looks something like this:
(NOTE: The Flex ant tasks include an html-wrapper task, but I found it lacking for reasons that now escape me. I think the parsing of the HTML files was either not there or crappy. Either way, I dumped it for some very valid reason, I am sure.)
For the index.template.html, we can use another cool ant ask that uses regular expressions to replace content within a file. The name of that task is replaceregexp, and it’s dead sexy. Here is the copy command, and it’s a bit of a doozy. I am not gonna go through each token, as that would be REALLY boring (not super exciting like the rest of this post)
Finally, let’s take another look at our build.properties file, which added quite a bit of properties for this task.
We have some of our HTML tokens, like width and height, a new directory (wrapper.dir) and the name of our HTML file. For the ant build, I rename it to index.html because I plan on using ant to actually deploy the application to a web server and I want a default document name to be used.
So, next post will concentrate on adding a unit testing framework and getting ant to run our tests too. I know the first couple of posts were mongo-basic, but I wanted to lay a bit of a foundation before getting into the cooler stuff. We’ll get there. I am about to head off on a mini-vacation, so it might be a week or more before I get to it. I hope you can manage until then….
Oh, and here’s our build.xml, in full, just for fun: