TODO List
And indeed, there is so much more TODO...
Invicta is a good start. However, there are numerous modifications and improvements we can think of, that will make Invicta into the powerful build management tool we want it to be. Following is a list of these ideas; if you can think of others, we'd love to hear them; if you are willing to help - even better.
Additional Component Types
The following Component Types should be added to the list of types available for use by developers:
EJB
Automatically generate descriptors ('ejb-jar.xml', etc) and Java interface (home and remote) using XDoclet.
Perform EJB compilation ('ejbc') for creating a ready-for-deployment JAR file.
Support multiple EJB compilers (BEA WebLogic and others).
Create a client JAR file for remotely accessing the deployed bean.
Allow deployment of the created EJB application on remote application servers.
Precompiled WAR
Perform Jasper JSP compilation on existing JSP files for generating Java sources. This will help in finding errors in JSP files before run-time and will reduce the waiting times in deployment and first-time access to the deployed JSP files.
Compile both static and generated Java sources and pack the classes in a JAR file.
Automatically generate a Web descriptor ('web.xml') for the servlets of a component (both the static servlets and the ones generated from JSP files).
CLI
A component that should be distributed as a set of command line utilities.
Allow distributing all JAR files of the relevant utilities to a destination directory.
Create a special dependencies JAR for helping the JVM in finding all required JAR files.
Web Services
Ease the creation of Web Services applications.
Generate code or descriptors using standard tools.
Allow deployment of Web Services applications or remote application servers.
Web Definition Utility
For editing Project Definition Files, a Web definition utility is planned. This simple tool will have a standard tree-list view: the tree will display a list of components, products, their properties and dependencies; the list will show the relevant details of the currently selected item in the tree. For example, when a component is selected in the tree, the component's name and directory will appear in the list.
Sub-missions:
Parsing the XML definition files using current Invicta code.
Displaying the tree according to the contents of the definition files. The tree could look like the output of the Documentation Dumper.
Enabling addition, deletion and modification of components, properties, products and all other settings.
Saving changed information back to the Project Definition files.
Customizable Product Types
Although it is currently possible to create custom types, the possible types of products and their attributes is constant and cannot be modified or extended by Invicta's users. Therefore, a mechanism for supporting customizable product types is required:
Allow developers to create their own types of products.
Making the project definition XML files be dynamic instead of being DTD validated. For example, a new custom product type named 'zip' is created. This product type defines the attribute 'compressionLevel'. As shown in the following example, Invicta should support specifying 'zip' as the product type, although its not part of the pre-defined types, and the additional 'compressionLevel' attribute, which is not defined in the original DTD file.
<product type="zip" file="MyFile.zip" compressionLevel="5"/>
Allow template handlers and type definitions to access the additional custom product types.
IDE Integration
Another way of making Invicta useful is to embed it in a popular IDE. This way, a developer will not have to leave his developing suite in order to build the project he is working on. The first target of implementation is Eclipse, mainly for being currently the most popular open-source IDE in the Java software development world.
Currently the ANT build script generated by Invicta can be easily used within IDE application such as Eclipse. However, being able to invoke Invicta and to manage its project definition as part of a standard IDE usage, is still missing and is definitely wanted.
Additional Dumpers
The ability to add Dumpers is one of Invicta's strong points. Clearly many Dumpers can be thought of to extend Invicta's capabilities. The ones we think are the most useful still missing are:
Dependency Graph Dumper
Create a graph describing the relations between a project's various components. This way, without any extra investment of time, the developer gets a way to visually describe the project, an ability often required. Below is an example of such a graph:
Eclipse Dumper
Create Eclipse '.project' and '.classpath' files, for easy definition of the project in the Eclipse environment. The project definition files of Invicta already contain all the required information for the definition files of Eclipse's projects, therefore, Invicta can save the effort of defining dependencies of projects and JAR files in Eclipse.
Some more ideas
Support libraries of ANT code instead of generating duplicated long parts of templates.
Support nested template handler call.
Support modifying all values of general properties using a single external file.
Automatic HTML documentation creation of template handlers, dumpers and types.
Report about multiple errors (syntactic or semantic) instead of a single error at a time.
Support specifying a filter of files (list of files) per product of a component.
Enhance the Project type: project Javadoc creation, zip packaging, etc.
Add an additional Global type that doesn't include the execution of Invicta as part of the generated build script.