At 1:13 PM +0000 6/6/03, Aaron Robinson wrote:
What's the best approach to customising a suplpied plug-in? I assume that we don't want to change the supplied plug-ins as the changes will be lost when we upgrade

If you can, create a "maven.xml" file in your directory (same directory where project.xml is) and add "postGoal" or "preGoal" tags to have your behavior happen before or after some specific goal in the plug-in you want to modify.


Below is an example of a maven.xml file I use on a lot of projects. It is how we've solved the problem that Maven doesn't give filtering (a la ANT) any place in the official model. Hopefully it'll give you an idea of how to do similar things yourself. The "preGoal" to "war:init" copies files from a static directory (src/webapp) into a property-defined directory (maven.war.src), and if they aren't JSPs, it puts them through an ant filtering process. We use this to change configuration values between deploy targets (local, dev server, staging server, production server).

The other is a postGoal to "java:compile" which also deals with our pattern of "target-specific" resources, although in this case it handles the filtering of classpath resources.

This definitely wasn't written for redistribution, so you may have to deal with certain hard-coded expectations about where things will be in your project directory structure, etc. But it should give a general idea of how you can make your own maven.xml file.

Joe

<?xml version="1.0"?>
<project
 xmlns:j="jelly:core"
 xmlns:license="license"
 xmlns:util="jelly:util"
 xmlns:ant="jelly:ant">

<!--
    - MAVEN PRE-GOAL: 'war:init'
    - Copy and filter web-inf values
    -->
  <preGoal
   name="war:init">
    <ant:available
     property="maven.target.filters.available"
     file="${basedir}/conf/filters-${deploy.target}.properties" />

    <j:set
     var="jgsi.war.src"

value="${pom.getPluginContext('maven-war-plugin').getVariable('maven.war.src')}" />

    <ant:copy
     todir="${jgsi.war.src}"
     overwrite="true">
      <ant:fileset
       dir="${basedir}/src/webapp">
        <excludes>
          <exclude>**/*.jsp</exclude>
        </excludes>
      </ant:fileset>

      <j:if
       test="${maven.target.filters.available}">
        <ant:filterset>
          <ant:filtersfile
           file="${basedir}/conf/filters-${deploy.target}.properties" />
        </ant:filterset>
      </j:if>
    </ant:copy>

<ant:echo>Copying JSPs -- no filtering</ant:echo>

    <ant:copy
     todir="${jgsi.war.src}"
     overwrite="false">
      <ant:fileset
       dir="${basedir}/src/webapp">
        <includes>
          <include>**/*.jsp</include>
        </includes>
      </ant:fileset>
    </ant:copy>
  </preGoal>

<!--
    - MAVEN POST-GOAL: 'java:compile'
    - Copy resources
    -->
  <postGoal
   name="java:compile">
    <attainGoal
     name="target:copy-resources" />
  </postGoal>

<!--
    - MAVEN GOAL: 'target:copy-resources'
    - copy and filter resource according to deploy targets
    -->
  <goal
   name="target:copy-resources"
   description="copy and filter resource according to deploy targets">
    <ant:echo>copy target-specific resources -
    ${deploy.target}</ant:echo>

    <ant:available
     property="jgsi.resource.dir.available"
     file="${basedir}/src/resource" />

    <ant:available
     property="jgsi.resource.target.dir.available"
     file="${basedir}/src/resource-${deploy.target}" />

    <ant:available
     property="jgsi.resource.target.filters.available"
     file="${basedir}/conf/filters-${deploy.target}.properties" />

    <ant:condition
     property="jgsi.any.resources"
     value="true">
      <ant:or>
        <ant:istrue
         value="${jgsi.resource.dir.available}" />

        <ant:istrue
         value="${jgsi.resource.target.dir.available}" />
      </ant:or>
    </ant:condition>

    <j:if
     test="${jgsi.any.resources}">
      <ant:copy
       todir="${maven.build.dest}"
       overwrite="true">
        <j:if
         test="${jgsi.resource.target.filters.available}">
          <ant:filterset>
            <ant:filtersfile
             file="${basedir}/conf/filters-${deploy.target}.properties" />
          </ant:filterset>
        </j:if>

        <j:if
         test="${jgsi.resource.dir.available}">
          <ant:fileset
           dir="${basedir}/src/resource" />
        </j:if>

        <j:if
         test="${jgsi.resource.target.dir.available}">
          <ant:fileset
           dir="${basedir}/src/resource-${deploy.target}" />
        </j:if>
      </ant:copy>
    </j:if>
  </goal>
</project>


--
--
Joe Germuska [EMAIL PROTECTED] http://blog.germuska.com "If nature worked that way, the universe would crash all the time." --Jaron Lanier


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to