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]