You are previewing Java Power Tools.
O'Reilly logo
Java Power Tools

Book Description

All true craftsmen need the best tools to do their finest work, andprogrammers are no different. Java Power Tools delivers 30open source tools designed to improve the development practices ofJava developers in any size team or organization. Each chapterincludes a series of short articles about one particular tool --whether it's for build systems, version control, or other aspectsof the development process -- giving you the equivalent of 30 shortreference books in one package.No matter which development method your team chooses, whether it'sAgile, RUP, XP, SCRUM, or one of many others available, JavaPower Tools provides practical techniques and tools to helpyou optimize the process. The book discusses key Java developmentproblem areas and best practices, and focuses on open source toolsthat can help increase productivity in each area of the developmentcycle, including:

  • Build tools including Ant and Maven 2

  • Version control tools such as CVS and Subversion, thetwo most prominent open source tools

  • Quality metrics tools that measure different aspects ofcode quality, including CheckStyle, PMD, FindBugs and Jupiter

  • Technical documentation tools that can help you generategood technical documentation without spending too much effortwriting and maintaining it

  • Unit Testing tools including JUnit 4, TestNG, and theopen source coverage tool Cobertura

  • Integration, Load and Performance Testing to integrateperformance tests into unit tests, load-test your application, andautomatically test web services, Swing interfaces and webinterfaces

  • Issue management tools including Bugzilla and Trac

  • Continuous Integration tools such as Continuum, CruiseControl, LuntBuild and Hudson

  • If you are a Java developer, these tools can help improve yourdevelopment practices, and make your life easier in the process.Lead developers, software architects and people interested in thewider picture will be able to gather from these pages some usefulideas about improving your project infrastructure and bestpractices.

    Table of Contents

    1. Dedication
    2. Foreword
    3. Preface
      1. How This Book Is Organized
        1. Build Tools
        2. Version Control Tools
        3. Unit Testing
        4. Integration, Load, and Performance Testing
        5. Quality Metrics Tools
        6. Technical Documentation Tools
        7. Issue Management Tools
        8. Continuous Integration Tools
      2. Who Should Read This Book
      3. What This Book Doesn’t Cover
      4. Contributing Authors
      5. Technical Reviewers
      6. Conventions
      7. Source Code
      8. About the Title
      9. Acknowledgments
      10. Using Code Examples
      11. Safari® Enabled
      12. How to Contact Us
    4. Introduction
    5. I. Build Tools
      1. 1. Setting Up a Project Using Ant
        1. Ant in the Build Process
        2. Installing Ant
          1. Installing Ant on a Unix Machine
          2. Installing Ant on Windows
          3. ANT_OPTS and ANT_ARGS: Some Other Useful Environment Variables
        3. A Gentle Introduction to Ant
          1. Basic Ant Concepts
          2. A Simple Ant Build File
          3. Running Ant
          4. Dependencies Between Targets
          5. Documenting Your Project
        4. Compiling Your Java Code in Ant
        5. Customizing Your Build Script Using Properties
        6. Running Unit Tests in Ant
          1. Using JUnit in Ant
          2. Preparing Your Build for Automated Tests
          3. Using the <junit> Task
          4. Running Multiple Tests
          5. Running Tests in a Separate JVM
          6. Generating HTML Test Reports
          7. Using Asserts in Your Test Cases
        7. Generating Documentation with Javadoc
        8. Packaging Your Application
          1. Generating a JAR File
          2. Generating a WAR File or an EAR File
        9. Deploying Your Application
          1. Copying Files
          2. Other Deployment Techniques
        10. Bootstrapping Your Build Scripts
        11. Using Maven Dependencies in Ant with the Maven Tasks
          1. The Maven 2.0 Ant Tasks
          2. Installing the Maven Ant Tasks
          3. Declaring and Using Maven Dependencies in Ant
          4. Packaging the Dependencies
          5. Choosing Your Repositories
          6. Using an Existing Maven POM File
        12. Using Ant in Eclipse
        13. Using Ant in NetBeans
        14. Manipulating XML with XMLTask
          1. Examples
          2. DTDs and XMLTask
          3. Driving Ant via XMLTask
          4. Other Tricks
            1. Changing encodings
            2. Maintaining documents with comments
        15. Conclusion
      2. 2. Setting Up a Project Using Maven 2
        1. Maven and the Development Build Process
        2. Maven and Ant
        3. Installing Maven
          1. Installing Maven on a Unix Machine
          2. Installing Maven on a Windows Machine
        4. Declarative Builds and the Maven Project Object Model
          1. An Introduction to Declarative Build Management
          2. Project Context and Artifacts
          3. A Human-Readable Project Description
          4. Declaring your Continuous Integration Server
          5. Defining the Development Team
          6. Managing Dependencies
          7. Customizing Your Build Process
          8. Setting Up Reporting
          9. Defining Build Profiles
        5. Understanding the Maven 2 Lifecycle
        6. The Maven Directory Structure
        7. Configuring Maven to Your Environment
          1. Using a Proxy
          2. Using a Local Mirror
          3. Changing Your Maven Cache Location
          4. Defining Arbitrary Environment-Specific Variables
        8. Dependency Management in Maven 2
          1. Declaring Dependencies
          2. Managing Transitive Dependencies
          3. Dependency Scope
          4. Handling Proprietary Dependencies
          5. Refactoring Your Dependencies Using Properties
        9. Looking for Dependencies with MvnRepository
        10. Project Inheritance and Aggregation
        11. Creating a Project Template with Archetypes
        12. Compiling Code
        13. Testing Your Code
        14. Packaging and Deploying Your Application
        15. Deploying an Application Using Cargo
        16. Using Maven in Eclipse
        17. Using Maven in NetBeans
        18. Using Plug-Ins to Customize the Build Process
          1. Creating a Plug-In
          2. Manipulating the Build Lifecycle
          3. Hooking into Maven
          4. Using Plexus Components
        19. Setting Up an Enterprise Repository with Archiva
          1. Installing Archiva
          2. Configuring Repositories in Archiva
          3. User Management
          4. Browsing the Repository
          5. Running Archiva on Another Port
          6. Archiva Proxy Connectors
          7. Setting Up Remote Repositories
          8. Configuring Archiva Behind a Proxy
          9. Using Maven with Archiva
          10. Manually Deploying a File to an Archiva Repository
        20. Setting Up an Enterprise Repository Using Artifactory
          1. Setting Up the Maven Repository Using Artifactory
            1. The Artifactory directory structure
            2. Deploy in Tomcat 6
            3. Set up the Maven repositories
          2. Configuring Maven to Use the New Repository
            1. Configure Maven using project “pom.xml”
            2. Configure Maven using settings.xml
            3. Building using the new Maven repository
          3. Installing Artifacts to the Repository
            1. Installing artifacts using the web UI
            2. Installing artifacts from Maven command line
          4. Running Artifactory Through a Proxy
          5. Adding Other Remote Repositories
          6. Backing Up the Repository
        21. Using Ant in Maven
          1. Using Existing build.xml Files
          2. Embedding Ant Code in the POM
          3. External Dependencies
          4. Making Ant Plug-Ins
          5. Using Maven in Ant
          6. Generating Ant Script from a POM
        22. Advanced Archetypes
          1. Creating Your Own Archetypes
        23. Using Assemblies
          1. Creating Assemblies
          2. Built-in Descriptors
          3. Assemblies with Profiles
    6. II. Version Control Tools
      1. 3. Setting Up Version Control Using CVS
        1. An Introduction to CVS
        2. Setting Up a CVS Repository
        3. Creating a New Project in CVS
        4. Checking Out a Project
        5. Working with Your Files—Updating and Committing
        6. Resolving a Locked Repository
        7. Working with Keyword Substitution
        8. Working with Binary Files
        9. Tags in CVS
        10. Creating Branches in CVS
        11. Merging Changes from a Branch
        12. Viewing Change History
        13. Reverting Changes
        14. Using CVS in Windows
      2. 4. Setting Up Version Control Using Subversion
        1. An Introduction to Subversion
          1. Revision Numbers and Atomic Updates
          2. Fast Branching and Tagging
          3. Lightweight Network Transactions
          4. Handling Binary Files
        2. Installing Subversion
        3. Subversion Repository Types
        4. Setting Up a Subversion Repository
        5. Setting Up a New Subversion Project
        6. Checking Out Your Working Copy
        7. Importing Existing Files into Subversion
        8. Understanding Subversion Repository URLs
        9. Working with Your Files
          1. Updating Your Work Directory
          2. Working with Your Local Copy
          3. Committing Your Work
        10. Seeing Where You’re At: The Status Command
        11. Resolving Conflicts
        12. Using Tags, Branches, and Merges
        13. Rolling Back to a Previous Revision
        14. Using File Locking with Binary Files
        15. Breaking and Stealing Locks
        16. Making Locked Files Read-Only with the svn:needs-lock Property
        17. Using Properties
          1. Preserving the Executable Flag using svn:executable
          2. Forcing the File Type with svn:mime-type
          3. Making Subversion Ignore Files with svn:ignore
          4. Handling OS-Specific End-of-Lines with svn:eol-style
        18. Change History in Subversion: Logging and Blaming
        19. Setting Up a Subversion Server with svnserve
        20. Setting Up a Secure svnserve Server
        21. Setting Up a WebDAV/DeltaV Enabled Subversion Server
        22. Setting Up a Secure WebDAV/DeltaV Server
        23. Customizing Subversion with Hook Scripts
        24. Installing Subversion As a Windows Service
        25. Backing Up and Restoring a Subversion Repository
        26. Using Subversion in Eclipse
          1. Installing Subclipse
          2. Defining a Repository
          3. Adding a New Project to the Repository
          4. Creating a Project from the Subversion Repository
          5. Working with Files
          6. Keeping Track of Changes
          7. Branching and Merging
        27. Using Subversion in NetBeans
          1. Installing Subversion Support
          2. Creating a Subversion-Based Project
          3. Working with Your Files
          4. Keeping Track of Changes
          5. Branching and Merging
        28. Using Subversion in Windows
          1. Using TortoiseSVN in Windows Explorer
          2. Importing a New Project into the Repository
          3. Obtaining a Working Copy
          4. Committing Your Changes with TortoiseSVN
          5. Updating Your Working Copy
          6. Exploring the Repository
        29. Defect Tracking and Change Control
        30. Using Subversion in Ant
          1. Installing the <svn> Task
          2. Checking Out a Project
          3. Updating Code from the Repository
          4. Exporting a Directory Structure
          5. Creating a New Tag
        31. Conclusion
    7. III. Continuous Integration
      1. 5. Setting Up a Continuous Integration Server with Continuum
        1. An Introduction to Continuum
        2. Installing a Continuum Server
        3. Manually Starting and Stopping the Server
        4. Checking the Status of the Server
        5. Running the Continuum Server in Verbose Mode
        6. Adding a Project Group
        7. Adding a Maven Project
        8. Adding an Ant Project
        9. Adding a Shell Project
        10. Managing Your Project Builds
        11. Managing Users
        12. Setting Up Notifiers
        13. Configuring and Scheduling Builds
        14. Debugging Your Builds
        15. Configuring the Continuum Mail Server
        16. Configuring the Continuum Web Site Ports
        17. Automatically Generating a Maven Site with Continuum
        18. Configuring a Manual Build Task
        19. Conclusion
      2. 6. Setting Up a Continuous Integration Server with CruiseControl
        1. An Introduction to CruiseControl
        2. Installing CruiseControl
        3. Configuring an Ant Project
        4. Keeping People Notified with Publishers
        5. Setting Up a Maven 2 Project in CruiseControl
        6. The CruiseControl Dashboard
        7. Third-Party Tools
          1. CruiseControl Configuration Tool
          2. Firefox and Thunderbird Integration
        8. Conclusion
      3. 7. LuntBuild—A Web-Based Continuous Integration Server
        1. An Introduction to LuntBuild
        2. Installing LuntBuild
        3. Configuring the LuntBuild Server
        4. Adding a Project
          1. Configuring the Project Basics
          2. VCS Adaptors
          3. Builders
          4. Scheduling
          5. Login Mapping
        5. Using Project Variables for Version Numbering
        6. Build Results Diagnostics
        7. Using LuntBuild with Eclipse
        8. Reporting on Test Coverage in Luntbuild Using Cobertura
          1. Introduction
          2. Extending Luntbuild with Extension Points
          3. Creating a Cobertura Luntbuild Extension
          4. Using the Extension
          5. Running Cobertura with Ant
        9. Integrating Luntbuild with Maven
          1. Introduction
          2. Extending Maven to Support LuntBuild
            1. Setting up your project
            2. Creating the Mojo
            3. Integrating the Mojo with Maven
          3. Luntbuild Configuration
        10. Conclusion
      4. 8. Continuous Integration with Hudson
        1. An Introduction to Hudson
        2. Installing Hudson
        3. Managing the Hudson Home Directory
        4. Installing Upgrades
        5. Configuring Hudson
        6. Adding a New Build Job
          1. Building a Freestyle Project
          2. Building a Maven Project
        7. Organizing Your Jobs
        8. Monitoring Your Builds
        9. Viewing and Promoting a Particular Build
        10. Managing Users
        11. Authentication and Security
        12. Viewing Changes
        13. Hudson Plug-Ins
        14. Keeping Track of Test Results
        15. Keeping Track of Code Metrics
        16. Reporting on Code Coverage
      5. 9. Setting Up an Instant Messaging Platform with Openfire
        1. Instant Messaging in a Development Project
        2. Installing Openfire
        3. Setting Up Users and Accounts on Openfire
        4. Authenticating Users in an External Database
        5. Authenticating Users Against a POP3 Server
        6. Virtual Team Meetings with the Group Chat
        7. Extended Functionality with Openfire Plug-Ins
        8. Using Openfire with Continuum
        9. Using Openfire with CruiseControl
        10. Using Openfire with Luntbuild
        11. Sending Jabber Messages from a Java Application Using the Smack API
        12. Detecting Presence Using the Smack API
        13. Receiving Messages Using the Smack API
    8. IV. Unit Testing
      1. 10. Testing Your Code with JUnit
        1. JUnit 3.8 and JUnit 4
        2. Unit Testing with JUnit 4
        3. Setting Up and Optimizing Your Unit Test Cases
        4. Simple Performance Testing Using Timeouts
        5. Checking for Exceptions the Easy Way
        6. Using Parameterized Tests
        7. Using assertThat and the Hamcrest Library
        8. JUnit 4 Theories
        9. Using JUnit 4 with Maven 2
        10. Using JUnit 4 with Ant
        11. Selectively Running JUnit 4 Tests in Ant
          1. Running Individual Tests
          2. Running Tests Conditionally
        12. Integration Tests
        13. Using JUnit 4 in Eclipse
      2. 11. Next-Generation Testing with TestNG
        1. Introducing TestNG
        2. Creating Simple Unit Tests with TestNG
        3. Defining TestNG Test Suites
        4. The TestNG Eclipse Plug-In
          1. Installing the TestNG Plug-In
          2. Running TestNG Tests
        5. Using TestNG in Ant
        6. Using TestNG with Maven 2
        7. Managing the Test Lifecycle
        8. Using Test Groups
        9. Managing Dependencies
        10. Parallel Testing
        11. Test Parameters and Data-Driven Testing
        12. Checking for Exceptions
        13. Handling Partial Failures
        14. Rerunning Failed Tests
      3. 12. Maximizing Test Coverage with Cobertura
        1. Test Coverage
        2. Running Cobertura from Ant
        3. Checking the Code Coverage of TestNG Tests
        4. Interpreting the Cobertura Report
        5. Enforcing High Code Coverage
        6. Generating Cobertura Reports in Maven
        7. Integrating Coverage Tests into the Maven Build Process
        8. Code Coverage in Eclipse
        9. Conclusion
    9. V. Integration, Functional, Load, and Performance Testing
      1. 13. Testing a Struts Application with StrutsTestCase
        1. Introduction
        2. Testing a Struts Application
        3. Introducing StrutsTestCase
        4. Mock Tests Using StrutsTestCase
        5. Testing Struts Error Handling
        6. Customizing the Test Environment
        7. First-Level Performance Testing
        8. Conclusion
      2. 14. Integration Testing Databases with DbUnit
        1. Introduction
        2. Overview
          1. Purpose of DbUnit
          2. Setting Up DbUnit
          3. Running with DbUnit
        3. DbUnit Structure
          1. DatabaseTestCase
          2. IDatabaseConnection
          3. IDataSet
          4. ITable
          5. ITableMetaData
        4. Example Application
        5. Priming the Database
          1. Verifying Querying a Single Row
          2. Verifying Querying Multiple Rows
          3. Specifying NULLs by Omission
          4. Specifying NULLs by DTD
        6. Verifying the Database
          1. Verifying an UPDATE
          2. Verifying a DELETE
          3. Verifying an INSERT, Ignoring the Key
          4. Verifying an INSERT, with the Key
        7. Replacing Values
          1. Using NULL with a ReplacementDataSet
          2. Using NULL with a ValueReplacer
          3. Using an Image ValueReplacer
        8. Alternative Dataset Formats
          1. Using an XLS Dataset
          2. Using a <abbr xmlns="" xmlns:epub="" xmlns:m="" xmlns:pls="" xmlns:ssml="" xmlns:svg="" class="acronym">CSV</abbr> Dataset Dataset
          3. Using an InlineDataSet
        9. Dealing with Custom Data Types
          1. Specifying an INTERVALDS Data Type
        10. Other Applications
          1. Injecting the Test Fixture
          2. Using Transaction Rollback Teardown
          3. Testing a Stored Procedure
          4. Testing a View
          5. Exporting a Dataset with Ant
          6. Importing a Dataset with Ant
      3. 15. Performance Testing with JUnitPerf
        1. Introducing JUnitPerf
        2. Measuring Performance with TimedTests
        3. SimulatingLoad with LoadTests
        4. Load-Testing Tests That Are Not Thread-Safe
        5. Separating Performance Tests from Unit Tests in Ant
        6. Separating Performance Tests from Unit Tests in Maven
      4. 16. Load and Performance Testing with JMeter
        1. Introduction
        2. Installing JMeter
        3. Testing a Simple Web Application
          1. Setting Up a Thread Group
          2. Scheduling Your Tests
          3. Setting Up the HTTP Request Configuration Elements
          4. Adding an HTTP Request
        4. Structuring Your Test Case
        5. Recording and Displaying Test Results
          1. Visualizing Performance with the Graph Listener
          2. Getting More Details with the View Results Tree Listener
          3. Getting the Executive Summary
        6. Using the JMeter Proxy to Record a Test Case
        7. Testing Using Variables
        8. Testing on Multiple Machines
      5. 17. Testing Web Services with SoapUI
        1. Introduction
        2. An Introduction to SoapUI
          1. Web Service Testing
          2. Web Service Development
          3. When Is SoapUI Appropriate?
        3. Installing SoapUI
        4. Installing a Local Web Service
        5. Testing Web Services with SoapUI
        6. Load-Testing with SoapUI
        7. Running SoapUI from the Command Line
        8. Running SoapUI from Ant
        9. Running SoapUI from Maven
        10. Continuous Testing
        11. Conclusion
      6. 18. Profiling and Monitoring Java Applications Using the Sun JDK Tools
        1. The Sun JDK Profiling and Monitoring Tools
        2. Connecting To and Monitoring a Java Application with jConsole
        3. Monitoring a Remote Tomcat Application with jConsole
        4. Detecting and Identifying Memory Leaks with the JDK Tools
        5. Diagnosing Memory Leaks Using Heap Dumps, jmap, and jhat
        6. Detecting Deadlocks
      7. 19. Profiling Java Applications in Eclipse
        1. Profiling Applications from Within an IDE
        2. The Eclipse Test & Performance Tools Platform
        3. Installing TPTP
        4. TPTP and Java 6
        5. Basic Profiling with TPTP
        6. Studying Memory Use with the Basic Memory Analysis Results
        7. Analyzing Execution Time
        8. Displaying Coverage Statistics
        9. Using Filters to Refine Your Results
        10. Profiling a Web Application
        11. Conclusion
      8. 20. Testing Your User Interfaces
        1. Introduction
        2. Testing Your Web Application with Selenium
          1. Introduction
          2. Using the Selenium IDE
          3. Writing Selenium Test Scripts
            1. An introduction to Selenese
            2. Referring to objects on the web page
            3. Using variables
            4. Using assertions
          4. Running a Selenium Test Suite with Selenium Core
          5. Writing JUnit Tests with Selenium
          6. Using Selenium with Ant
          7. Using Selenium with Maven
        3. Testing Swing GUIs with FEST
          1. Introduction
          2. Testing GUIs Is Hard
          3. Introducing FEST
          4. Testing GUIs with FEST
          5. Following Windows with FEST
          6. Verifying Test Failures
          7. Testing Legacy Applications
          8. Tips for Writing Testable GUIs
        4. Conclusion
    10. VI. Quality Metrics Tools
      1. 21. Detecting and Enforcing Coding Standards with Checkstyle
        1. Using Checkstyle to Enforce Coding Standards
        2. Using Checkstyle in Eclipse
        3. Customizing Checkstyle Rules in Eclipse
        4. Customizing Checkstyle Rules Using the XML Configuration Files
        5. Customizing Checkstyle: Common Rules That You Can Do Without, and Some That You Could Use
        6. Defining Rules for Source Code Headers with Checkstyle
        7. Suppressing Checkstyle Tests
        8. Using Checkstyle with Ant
        9. Using Checkstyle with Maven
      2. 22. Preemptive Error Detection with PMD
        1. PMD and Static Code Analysis
        2. Using PMD in Eclipse
          1. Installing the PMD Plug-In
          2. Detecting and Displaying Errors
        3. Configuring PMD Rules in Eclipse
        4. More on the PMD Rulesets
        5. Writing Your Own PMD Ruleset
        6. Generating a PMD Report in Eclipse
        7. Suppressing PMD Rules
        8. Detecting Cut-and-Paste with CPD
        9. Using PMD in Ant
        10. Using PMD in Maven
      3. 23. Preemptive Error Detection with FindBugs
        1. FindBugs: A Specialized Bug Killer
        2. Using FindBugs in Eclipse
          1. Installing the FindBugs Plug-In
          2. Detecting and Displaying Errors
        3. Selectively Suppressing Rules with FindBug Filters
        4. Using FindBugs Annotations
        5. Using FindBugs in Ant
        6. Using FindBugs in Maven
        7. Conclusion
      4. 24. Inspecting the Results—Semiautomated Code Review with Jupiter
        1. Introducing Jupiter—A Code Review Tool for Eclipse
        2. Installing Jupiter in Eclipse
        3. Understanding the Jupiter Code Review Process
        4. Conducting Personal Code Reviews
        5. Configuration
        6. Setting Up Default Configuration Values
        7. Individual Reviews
        8. Team Review
        9. Rework Phase
        10. Jupiter Behind the Scenes
        11. Conclusion
      5. 25. Sharpen Your Focus with Mylyn
        1. Introduction to Mylyn
        2. Installing Mylyn
        3. Tracking Tasks and Issues
        4. Interacting with Task Repositories
        5. Focusing on a Task with Context Management
        6. Using the Eclipse Change Sets
        7. Sharing Context with Other Developers
        8. Conclusion
      6. 26. Monitoring Build Statistics
        1. Introduction
        2. QALab
          1. Using QALab in Ant
          2. Using QALab in Maven
        3. Source Code Management Metrics with StatSCM
        4. Statistics in Ant with StatSVN
          1. Installing StatSVN
          2. Extracting the Subversion Logfiles
          3. Generating the StatSVN Reports
    11. VII. Issue Management Tools
      1. 27. Bugzilla
        1. An Introduction to Bugzilla
        2. Installing Bugzilla
          1. System Prerequisites
          2. Installing the Bugzilla Application
          3. Installing the Perl Modules
          4. Installing the Bugzilla Application
          5. Configuring the Web Server
        3. Setting Up Your Bugzilla Environment
        4. Managing User Accounts
        5. Restricting Access Using User Groups
        6. Configuring a Product
        7. Tracking Progress with Milestones
        8. Managing Groups of Products with Classifications
        9. Searching for Bugs
        10. Creating a New Bug
        11. The Lifecycle of a Bugzilla Bug
        12. Scheduling Notifications (Whining)
        13. Customizing Fields in Bugzilla
        14. Conclusion
      2. 28. Trac—Lightweight Project Management
        1. An Introduction to Trac
        2. Installing Trac
        3. Setting Up a Trac Project
        4. Running Trac on the Standalone Server
        5. Setting Up Tracd As a Windows Service
        6. Installing Trac on an Apache Server
        7. Administrating the Trac Site
        8. Managing User Accounts
        9. Tailoring the Trac Web Site: Using the Wiki Function
        10. Using the Trac Ticket Management System
          1. Creating a New Ticket
          2. The Lifecycle of a Trac Ticket
        11. Updating Trac Issues from Subversion
        12. Customizing Trac Ticket Fields
        13. Setting Up Email Notifications
        14. Reporting Using Trac Queries and Reports
        15. Managing Progress with Trac Roadmaps and Timelines
          1. Trac Milestones
          2. The Timeline View
        16. Browsing the Source Code Repository
        17. Using RSS and ICalendar
        18. Customizing a Wiki Page with Python
        19. Conclusion
    12. VIII. Technical Documentation Tools
      1. 29. Team Communication with the Maven 2 Project Web Site
        1. The Maven 2 Project Web Site As a Communication Tool
        2. Setting Up a Maven Site Project
          1. Describing the Project
          2. Linking into the Issue Tracking System
          3. The Continuous Integration System
          4. The Project Team
          5. Mailing Lists
          6. The Source Repository
          7. Generating the Site
        3. Integrating Reports into Your Site
          1. Javadocs
          2. Unit Test Reports
          3. Test Coverage Reports
          4. Code Analysis Reports
          5. Change and Configuration Management
        4. Creating a Dedicated Maven Site Project
        5. Defining the Site Outline
        6. The Maven Site Generation Architecture
          1. Doxia
          2. APT
          3. FML
          4. XDoc
        7. Using Snippets
        8. Customizing the Look and Feel of Your Site
          1. Changing Skins
          2. Creating Your Own Style
          3. Velocity Manipulation
        9. Distributing Your Site
      2. 30. Automatically Generating Technical Documentation
        1. Introduction
        2. Visualizing a Database Structure with SchemaSpy
          1. Introduction
          2. An Overview of SchemaSpy
          3. Installing SchemaSpy
          4. Using SchemaSpy
          5. Using SchemaSpy in Ant
          6. Using SchemaSpy in Maven
        3. Generating Source Code Documentation with Doxygen
          1. Introduction
          2. The Doxygen Reports
          3. Installing Doxygen
          4. Configuring Doxygen
          5. Running Doxygen from the Command Line
          6. Using Doxygen with Ant
          7. How to Make Your Java Classes Doxygen-Friendly
            1. Using the brief descriptions
            2. Lists
            3. Links and references
            4. Documenting packages
            5. Documenting the home page
        4. Embedding UML Diagrams in Your Javadoc with UmlGraph
          1. Using UmlGraph in Ant
          2. Using UmlGraph in Maven
        5. Conclusion
    13. Bibliography
    14. Index
    15. About the Author
    16. Colophon
    17. Copyright