Ok its figured out. Had to write my own MavenFileFilter and use plexus to wire it in.
The only question I now have is how to set the role-hint for our custom MavenFileFilter in a pom file? To have our custom MavenFileFilter be wired in I stole the role-hint "default". But I would like to use my own role-hint because there is another "default" implementation and I do not want it to use that one. I do not know if it is by chance that our implementation is being used. For the MavenResourcesFiltering I was able to set the role-hint the mavenFilteringHints tag. I guess what I am asking for is the equivalent tag for setting the MavenFileFilter implementation? thanks jose On Wednesday, August 20, 2014 10:02 AM, Jose Martinez <[email protected]> wrote: Cool, thanks Robert. So now that I have the plugin functioning and my MavenResourcesFiltering's filterResources(mre) method being called, what can I do with the MavenResourcesExecution to access the ${propertyNames} in my resources and set their values? I pulled the List<Resource> from the MavenResourcesExecution, but I can't figure out how to get the ${propertyNames} from my resources or set their values? thanks jose On Tuesday, August 19, 2014 4:21 PM, Robert Scholte <[email protected]> wrote: Done, see MRESOURCES-182[1] Will be updated with the next release. thanks, Robert [1] https://jira.codehaus.org/browse/MRESOURCES-182 Op Tue, 19 Aug 2014 21:43:44 +0200 schreef Jose Martinez <[email protected]>: > Problem resolved. The documentation in this link has the dependency > tags in the wrong place... > http://maven.apache.org/plugins/maven-resources-plugin/examples/custom-resource-filters.html#Dependency_declaration > When I moved the plugin's dependencies tag outside of the configuration > tags then everything worked. Who ever manages that link please > investigate. Everything else on the site was spot on. > thanks > jose > > > On Tuesday, August 19, 2014 2:46 PM, Jose Martinez <[email protected]> > wrote: > > > Hello, > > I've made some progress on this and have a problem with Maven finding my > custom plugin's class. > > ============= > [ERROR] Failed to execute goal > org.apache.maven.plugins:maven-resources-plugin:2.6:resources > (default-resources) on project roc: java.util.NoSuchElementException > [ERROR] role: org.apache.maven.shared.filtering.MavenResourcesFiltering > [ERROR] roleHint: ResourceFilter [ERROR] -> [Help 1] > ============= > > I created a class that implements MavenResourcesFiltering, and added the > plexus javadoc comments as instructed. ============= > /** > * > * @author jmartinez > * > * @plexus.component > role="org.apache.maven.shared.filtering.MavenResourcesFiltering" > * role-hint="ResourceFilter" > */ > public class ResourceFilter implements MavenResourcesFiltering { > ================== > > I also added to the main project's POM the maven-resources-plugin with > the dependency and maven filtering hints. The problem I am having is > that Maven cannot find my MavenResourcesFiltering class. Its suppose to > be able to find it using the role-hint. > ============= > <pluginManagement> > <plugins> > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-resources-plugin</artifactId> > <version>2.6</version> > <configuration> > <dependencies> > <dependency> > <groupId>com.xxxx</groupId> > > <artifactId>xxxx-rfp-maven-plugin</artifactId> > <version>0.2</version> > </dependency> > </dependencies> > <mavenFilteringHints> > > <mavenFilteringHint>ResourceFilter</mavenFilteringHint> > </mavenFilteringHints> > </configuration> > </plugin> > > ============= > > I suspect the problem is that my plugin's jar is not being loaded to the > maven-resources-plugin classpath. I suspect this because my jar was not > being downloaded until I added it to the pom's dependencies list, versus > it being downloaded when it was just in the maven-resources-plugin > dependency list. > > Am I missing something here? > > thanks > jose > > > On Monday, August 18, 2014 3:08 PM, Jose Martinez > <[email protected]> wrote: > > > Karl, > > Thank you for responding. Yes I can go into more detail. > Lets go back to my example of the mysql DB credentials. Lets say I have > five environments. So that means I have 3 variables times 5 > environments and that comes out to 15 > various values. From what I understand about the > maven-resources-plugin that would mean I would have to do one of the > following: > 1) Stick those 15 values in the pom and then maybe use 5 different > profiles, one for each env. This can get quite cumbersome and our > deployment scripts would have to call mvn with the correct profile. > > 2) Use system variables. Have some code called at some point before > the maven build that would know which environment it is in and retrieve > all the values for each known property and make system variables out of > them. From what I understand this might still require I have them in > the POM; I'm not sure if maven-resources-plugin would automatically > replace each ${propertyName} with the proertyName system variable > without having to have the propertyName in the POM? > > 3) Is there another way that I am missing that this can be done using > maven-resources-plugin? I can see that it is very powerful tool, as > everything in Maven has proven to me to be so I'm probably missing > another approach. > > A few things to consider that I would like to have... > 1) Centralized view into all our properties that can be queried and have > tools built on top of (e.g. a maven resource filter). > > 2) Minimal entries of propertyName. Essentially the ${propertyName} > should only be entered into the property file and after that just the > entries that go into the central data store. The pom is left alone. > > 3) Environments can be easily added and removed and altered by only > touching the centralized datastore. > > I guess those three > things have one thing in common, benefits of having our properties in a > centralized datastore. At my current employer they built just such a > system that works off of web services (managed global properties on a > per environment basis). It is not in production yet so from my point of > view I will interface out the Dao and just swap implementations when its > ready... using a simple relational DB at first. > thanks > jose > > > On Monday, August 18, 2014 2:06 PM, Karl Heinz Marbaise > <[email protected]> wrote: > > > > Hi Jose, > > > can you elaborate a little bit more why you are not using the > default > filtering capabilities of maven-resources-plugin etc. ? > > Can you explain what exactly you like to achieve? > > > >> Hello, >> >> We have projects with many property and xml files that need resource >> filtering per environment. >> >> For example in a property file one might see ${mysqlDbHost}, >> ${mysqlDbPw}, and ${mysqlDbUser}. There would also be a system >> variable called ENVIRONMENT. Based on the ${propertyName} and >> ENVIRONMENT value, the resource filter would replace with the correct >> value. This can be done with a DB (SELECT value FROM properties WHERE >> env="env" and name="propertyName") or via a web service >> (getPropertyValue?env=env&name=propertyName). >> >> On the Maven side the solution seem to be to create a custom >> MavenResourcesFiltering. The custom MavenResourcesFiltering >> implementation would do the lookups I mentioned above for each >> ${propertyName} encountered in the resource files. >> >> 1) Is my assessment that creating a custom MavenResourcesFiltering is >> the way to go? Maybe this problem is already solved already, since it >> does not seem unique? >> >> 2) I have visited multiple Maven articles on this but still have no >> idea how to implement it, the sites I visited are listed below. Does >> anyone know of any document or can provide feedback on how to implement >> a custom MavenResourcesFiltering? >> >> It seems to me that at some point I would need a method that has either >> gets a list of all the ${propertyName}'s found in a > file and the ability to provide the value for that property name. > Following the links I found I cannot tell where that method should be > implemented and how to get it called from MyMojo.execute(). >> >> 1: http://maven.apache.org/shared/maven-filtering/ >> 2: http://maven.apache.org/shared/maven-filtering/usage.html >> 3: >> http://maven.apache.org/guides/plugin/guide-java-plugin-development.html >> >> Thank you! >> jose >> > > Kind regards > Karl-Heinz Marbaise > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
