Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven remote resource plugin issue

Tags:

maven

I know there are many other question in regards to this topic, I've searched and read them all but even that haven't helped so far.

The pom for shared-resources looks like this

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.myorganization</groupId>
        <artifactId>myapp</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>myapp-resources</artifactId>
    <name>Resources Bundle</name>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>bundle</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>      
    </build>
</project>

It basically says: pick up everything you have in the resource directory, and it really does that, all the resources end up in the root of jar file. with the remote-resources.xml also placed within jar under META-INF/manifest directory. So, everything seems just fine and according to expectations.

Now, the other, harder, not working part. The excerpt of pom file for the module using the shared resources specified above

<plugin>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <id>process-remote-resources</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <resourceBundles>
                                <resourceBundle>com.myorganization:myapp-resources:1.0-SNAPSHOT</resourceBundle>
                            </resourceBundles>
                            <outputdirectory>${project.build.directory}/shared-resources</outputdirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

So, here it says, process the resources from resourceBundle and put them in the shared-resources directory. But, nothing happens. And when I try to execute mvn remote-resources:process I got the error message saying that parameters for resourceBundles are missing or invalid. If I run mvn install there's no error, but when I try to copy (maven resources plugin) anything from shared-resources directory it just skips that as non-existing resource directory.

Additionally, I tried to put the wrong name for resourceBundle and that gave me an instant error that it does not exist, so I'm sure I have specified resourceBundle correctly.

Can anyone enlighten me? What am doing wrong? Thanks.

EDIT: Adding the part of the pom referencing shared-resources as dependecy

<dependency>
            <groupId>com.myorganization</groupId>
            <artifactId>myapp-resources</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

EDIT2: Adding the content of remote-resources.xml contained within shared resources jar:

<?xml version="1.0" encoding="UTF-8"?>
<remoteResourcesBundle xsi:schemaLocation="http://maven.apache.org/remote-resources/1.1.0 http://maven.apache.org/xsd/remote-resources-1.1.0.xsd"
    xmlns="http://maven.apache.org/remote-resources/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <sourceEncoding>UTF-8</sourceEncoding>
</remoteResourcesBundle>

Should this one be empty like that (with except of source encoding settings)?

EDIT3: I've taken a look at the xsd schema used for remote-resource.xml and it seems this should not be empty but contain the list of the remote resources to be used in the process goal. That would mean that this file is not generated properly.

EDIT4: Attaching the error thrown when executing mvn remote-resources:process:

The parameters 'resourceBundles' for goal org.apache.maven.plugins:maven-remote-resources-plugin:1.5:process are missing or invalid -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-remote-resources-plugin:1.5:process (default-cli) on project lte-troubleshoting-solution: The parameters 'resourceBundles' for goal org.apache.maven.plugins:maven-remote-resources-plugin:1.5:process are missing or invalid
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:220)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginParameterException: The parameters 'resourceBundles' for goal org.apache.maven.plugins:maven-remote-resources-plugin:1.5:process are missing or invalid
        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.populatePluginFields(DefaultMavenPluginManager.java:581)
        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:534)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:97)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
        ... 19 more

And what is also interesting, it seems that the outputDirectory setting in the plugin configuration is not picked up at all since in the debug log I can see that the outputDirectory setting is set to default value.

like image 891
htomek Avatar asked Feb 13 '14 13:02

htomek


2 Answers

I managed to find a solution in the end. The problem was in fact that I had to explicitly specify includes in the pom configuration to have remote-resources.xml generated properly and later in the process goal to pick up all the resource listed in the remote-resource.xml.

So, the final pom for shared-resources module should look like this (if you want to include everything):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.myorganization</groupId>
        <artifactId>myapp</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>myapp-resources</artifactId>
    <name>Resources Bundle</name>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>bundle</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>      
    </build>
</project>

Additional note It seems that outputDirectory for process goal has no effects, resources are unpackaged on the default path specified in the plugin.

like image 50
htomek Avatar answered Nov 10 '22 18:11

htomek


Checking with the documentation of the plugin here, I can't see any obvious error.

Which means com.myorganization:myapp-resources:1.0-SNAPSHOT must be wrong/broken somehow.

Make sure you really have this dependency in your local repo. If you don't have it, make sure Maven can download it from somewhere or install it locally.

like image 44
Aaron Digulla Avatar answered Nov 10 '22 18:11

Aaron Digulla