Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [m2e-users] m2e-wtp, war overlays and shared resources

Hi,

once again I'm having troubles with shared resources I'm using in a WAR project. The basic structure is:

- mvn-p1-resources
...
- mvn-pn-resources
- app-main
  +- app-jar
  +- app-war
     +- app-jar
     +- mvn-p1-resourcse
     +- ...
     \- mvn-pn-resources
  +- app-ear


The projects mvn-p*-resources use packaging type "jar" and contain resource files such as HTML files, CSS, XSL,_javascript_s etc., and are added as provided dependencies in the WAR project. The WAR module ifself uses overlays to package them into the correct place inside the generated WAR; see below in the mail I'm replying to how I'm actually doing this.

Building the EAR from the command line works; everything is in the correct place as expected. When I add the EAR in Eclipse to a server such as Wildfly the application doesn't start correctly because of missing resources. So far I've tracked down the issues to the following behaviour:

- Delete mvn-p1...n-resources from my workspace
- Re-Checkout the project from Subversion
- Open the WAR project's properties dialog, have a look into the deployment assembly dialog page
- For all deleted and re-added projects mvn-pX-resources the dialog page shows a warning message
  "Cannot find entry: "mvn-pX-resources"

Right-clicking on the projects and executing Maven->Update Project... doesn't have any effect; the warning messages remain, and the application doesn't start correctly.

I can manually fix this by right-clicking on mvn-pX-resources, execute Configure -> Convert to Faceted Form... and select the checkbox by "Utility Module" in the dialog. This is puzzling me because according to the docs ([1]) m2e-wtp has support for jar dependency projects and should add the Java and Utility Facets to them.

At least for "normal" jar module dependencies (i.e. dependencies that contain Java code) this works as expected. I can only imagine that m2e-wtp (?) treats provided dependencies different than direct or transitive used ones...?

Any hints what is causing this behaviour?




- Eclipse Oxygen (20170620-1800)
- m2e 1.8.1.20170728-1531
- m2e-wtp 1.3.2.20170517-2015
  together with the m2e-wtp JAX-RS, JPA and JSF configurators for WTP (same version)
- Oracle JDK 8u141
- Windows 8.1 x64


[1] https://wiki.eclipse.org/M2E-WTP


Regards

Thorsten





> Von: "Thorsten Heit" <thorsten.heit@xxxxxx>

> An: Maven Integration for Eclipse users mailing list <m2e-users@xxxxxxxxxxx>
> Datum: 18.04.2017 15:37
> Betreff: Re: [m2e-users] m2e-wtp, war overlays and shared resources
> Gesendet von: m2e-users-bounces@xxxxxxxxxxx
>
> Hi,
>
> referencing an older thread of mine...
>
> I'm having problems with m2e-wtp on a multi-module project that produces
> a few EARs with WARs that use overlays: Deploying such a WAR on Tomcat 8.
> 5.x or the corresponding EAR to Wildfly 10.1 is unsuccessful, the
> application doesn't start correctly because of missing resources in the
> WAR's WEB-INF folder.
>
> Basic structure of my project:
>
> app-main
> +- app-form-resources
> +- app-xsl-resources
> +- app-jar
>    +- mvn-p1
>    +- mvn-p2
>    +- ...
>    \- mvn-pn
> +- app-war
>    +- app-jar
>    +- mvn-p1-resources
>    +- mvn-p2-resources
>    +- ...
>    \- mvn-pn-resources
> +- app-ear
>    \- app-war
>
> The other mentioned WARs and EARs are basically the same as app-war/app-
> ear, but with a few customized files under WEB-INF. Anyway.
>
> P1...n are legacy projects in our Subversion repository containing both
> Java sources and resource files (_javascript_, HTML, XML, XSL etc.) and are
> used in other applications built in our department. So far I have created
> a Maven-compatible "layer" for each of these projects and factored out
> Java files and resources:
> * mvn-pX contains only the Java sources from project X (under src/main/java)
> * mvn-pX-resources contains the legacy project's resources (directly
> under src/main/resources)
>
> The same holds for app-form-resources and app-xsl-resources: two projects
> that contain resources from the legacy project for which I'm building the
> Maven layer.
>
> All resource projects are of type "jar" and used as dependency with scope
> "provided" in app-war:
>
> <dependency>
>         <groupId>mygroup</groupId>
>         <artifactId>mvn-p1-resources</artifactId>
>         <version>...</version>
>         <scope>provided</scope>
> </dependency>
>
> To put the resources in the correct place I'm using overlays:
>
> <plugin>
>         <groupId>org.apache.maven.plugins</groupId>
>         <artifactId>maven-war-plugin</artifactId>
>         <version>3.0.0</version>
>         <configuration>
>                 <filteringDeploymentDescriptors>true</
> filteringDeploymentDescriptors>
>
>                 <overlays>
>                         <overlay>
>                                 <groupId>${project.groupId}</groupId>
>                                 <artifactId>app-xsl-resources</artifactId>
>                                 <type>jar</type>
>                                 <targetPath>/WEB-INF/xsl</targetPath>
>                         </overlay>
>                         <overlay>
>                                 <groupId>${project.groupId}</groupId>
>                                 <artifactId>app-form-resources</artifactId>
>                                 <type>jar</type>
>                                 <targetPath>/form</targetPath>
>                         </overlay>
>
>                         <overlay>
>                                 <groupId>group1</groupId>
>                                 <artifactId>mvn-p1-resources</artifactId>
>                                 <type>jar</type>
>                                 <targetPath>/</targetPath>
>                                 <includes>
>                                         <include>**/*.css</include>
>                                         <include>**/*.js</include>
>                                 </includes>
>                         </overlay>
>                         <overlay>
>                                 <groupId>group1</groupId>
>                                 <artifactId>mvn-p1-resources</artifactId>
>                                 <type>jar</type>
>                                 <targetPath>/WEB-INF</targetPath>
>                                 <includes>
>                                         <include>**/*.x*</include>
>                                         <include>**/*.js</include>
>                                 </includes>
>                         </overlay>
>
>                         <overlay>
>                                 <groupId>group2</groupId>
>                                 <artifactId>mvn-p2-resources</artifactId>
>                                 <type>jar</type>
>                                 <targetPath>/form</targetPath>
>                                 <includes>
>                                         <include>**/*.css</include>
>                                         <include>**/*.js</include>
>                                 </includes>
>                         </overlay>
>
>                         <overlay>
>                                 <groupId>group3</groupId>
>                                 <artifactId>mvn-p3-resources</artifactId>
>                                 <type>jar</type>
>                                 <targetPath>/form</targetPath>
>                                 <includes>
>                                         <include>**/*.js</include>
>                                 </includes>
>                         </overlay>
>                         <overlay>
>                                 <groupId>group3</groupId>
>                                 <artifactId>mvn-p3-resources</artifactId>
>                                 <type>jar</type>
>                                 <targetPath>/WEB-INF/xsl</targetPath>
>                                 <excludes>
>                                         <exclude>**/*.js</exclude>
>                                         <exclude>META-INF/**</exclude>
>                                 </excludes>
>                         </overlay>
>
>                         ...
>                 </overlays>
>         </configuration>
> </plugin>
>
>
> My problem is that the EAR builds successfully on the command line and
> contains all specified resources in their correct place, but with WTP /
> m2e-wtp problems arise:
>
> * Deploying app-war to Tomcat or app-ear to Wildfly doesn't work; the
> resources from app-form-resources, app-xsl-resources and mvn-p1...3-
> resources are completely missing
> * When I right-click in the package explorer view on app-war and open the
> properties, I see a few warnings in the deployment assembly dialog page:
>   Cannot find entry: app-form-resources
>   The same warning entry for app-xsl-resources and mvn-p1...3-resources
>   Other referenced (resource) projects are correctly listed without
> errors/warnings.
> * Starting app-ear in Wildfly and having a look in the folder <wildfly-
> home>/standalone/deployments you can see that all other resource projects
> are correctly contained/deployed.
>
> All resource projects have the same structure and basically differ only
> in their GAV coordinates and referenced resource files.
> Changing the order of the overlay entries doesn't make any difference, by the way.
>
>
> Do you have any idea what can cause this strange behaviour?
>
>
> Regards
>
> Thorsten
>
>
>
> m2e-users-bounces@xxxxxxxxxxx schrieb am 26.02.2015 19:14:47:
>
> > Von: Fred Bricon <fbricon@xxxxxxxxx>
> > An: Maven Integration for Eclipse users mailing list <m2e-users@xxxxxxxxxxx>
> > Datum: 26.02.2015 19:15
> > Betreff: Re: [m2e-users] m2e-wtp, war overlays and shared resources
> > Gesendet von: m2e-users-bounces@xxxxxxxxxxx
> >
> > m2e-wtp currently doesn't support artifacts generated by maven-assembly-
> > plugin within the workspace. i.e a workspace project cannot reference a
> > zip classifier artifact matching another workspace project.  
> >
> > You basically have 2 solutions :  
> > - force the consumers to reference the zip file directly : either disable
> > workspace resolution for projects consuming your zip (project > maven >
> > disable worskpace resolution)  or delete mvn-Q-resources from your
> > workspace. The big drawback of that approach is you'll have to execute
> > mvn install on mvn-Q-resources everytime a file changes
> > - change mvn-Q-resources type to jar. Move all your web resources to src/
> > main/resources and reference :
> >
> >        <overlay>
> >           <groupId>mygroup</groupId>
> >           <artifactId>mvn-Q-resources</artifactId>
> >           <type>jar</type>
> >           <targetPath>/WEB-INF</targetPath>
> >           <includes>
> >             <include>/xsl/**</include>
> >           </includes>
> >         </overlay>  
> >
> > That solution should allow you to keep working/deploying stuff incrementally
> >
> > On Thu, Feb 26, 2015 at 11:25 AM, Thorsten Heit <thorsten.heit@xxxxxx> wrote:
> > Hi,
> >
> > I'm in the process of creating Maven builds for a few applications. These
> > applications use Ant build scripts to create WAR and EAR files.
> >
> >
> > Initial situation:
> >
> > * All source code is stored in our Subversion repository.
> > * Each application depends on several internal projects P1, P2, ... that
> > all have a non-Maven-like structure.
> > * Most, but not all of them not only contain Java code, but also web
> > resources (HTML, _javascript_, XSL, ...) that have to be placed directly
> > under "/" or under "/WEB-INF" in the resulting application WAR(s).
> >
> >
> >
> > Actual situation:
> >
> > * For each internal project P that contains only Java code I have created
> > a new Maven project mvn-P using Maven conventions and directory layout;
> > Java code is referenced under src/main/java via svn:externals.
> > * For each project Q that contains both Java sources and resource files,
> > I have created two Maven projects mvn-Q and mvn-Q-resources; as above
> > Java code and resources are referenced via svn:externals. The mvn-Q-
> > resources project is of type pom and uses the assembly plugin to create a
> > zip archive containing the resources; i.e. builds an artifact named mvn-
> > Q-resources-<version>-zip.zip
> >
> >
> > For one of the WAR and EAR projects I created a multi-module Maven
> > project to build the same WAR and EAR via Maven as the legacy Ant script.
> > The structure is basically the following:
> >
> > app-main
> > +- app-jar
> >    +- mvn-p
> >    \- mvn-q
> > +- app-war
> >    +- app-jar
> >    \- mvn-q-resources
> > +- app-ear
> >    \- app-war
> >
> >
> > The app-war pom.xml contains the following:
> >
> > <plugins>
> >   <plugin>
> >     <groupId>org.apache.maven.plugins</groupId>
> >     <artifactId>maven-war-plugin</artifactId>
> >     <configuration>
> >       <!-- web resources -->
> >       <overlays>
> >         <overlay>
> >           <groupId>mygroup</groupId>
> >           <artifactId>mvn-Q-resources</artifactId>
> >           <type>zip</type>
> >           <classifier>zip</classifier>
> >           <targetPath>/WEB-INF</targetPath>
> >           <includes>
> >             <include>/xsl/**</include>
> >           </includes>
> >         </overlay>
> >         ...
> >       </overlays>
> >     </configuration>
> >   </plugin>
> >   ...
> > </plugins>
> >
> > <dependencies>
> >   <dependency>
> >     <groupId>mygroup</groupId>
> >     <artifactId>mvn-Q-resources</artifactId>
> >     <version>1.0-SNAPSHOT</version>
> >     <type>zip</type>
> >     <classifier>zip</classifier>
> >     <scope>runtime</scope>
> >   </dependency>
> >   ...
> > </dependencies>
> >
> > So far, this works pretty fine using command-line Maven.
> >
> >
> >
> > The problem:
> >
> > My Eclipse workspace contains all necessary projects, i.e. mvn-P, mvn-Q,
> > mvn-Q-resources, app-main, app-jar, app-war and app-ear. In the server
> > view I created a new instance using a locally installed Tomcat. After
> > adding app-war to it I see all the project's jar dependencies in the view. But:
> > Although I can start the server and debug in the referenced dependencies,
> > the WAR application doesn't run correctly because the referenced
> > resources are not available, i.e. everything I added to m-war-p via
> > overlays/overlay.
> >
> > I'm using the following:
> >
> > * Eclipse Mars 4.5 (Build id: I20150203-1300)
> > * Java EE Developer Tools 3.7.0.v201501282120
> > * m2e 1.6.0.20150220-1952
> > * m2e-wtp 1.2.0.20150212-1712
> > * Tomcat v8.0.20
> > * Java 7u76
> >
> > Do you have any hints on how to solve this?
> > Do I need to change something?
> > Is m-assembly-p the right way to create an archive containing resources
> > that are shared between other applications?
> >
> >
> >
> > Regards
> >
> > Thorsten
> > _______________________________________________
> > m2e-users mailing list
> > m2e-users@xxxxxxxxxxx
> > To change your delivery options, retrieve your password, or unsubscribe
> > from this list, visit
> >
https://dev.eclipse.org/mailman/listinfo/m2e-users
> >
>
> >
> > --
> > "Have you tried turning it off and on again" - The IT Crowd
> > _______________________________________________
> > m2e-users mailing list
> > m2e-users@xxxxxxxxxxx
> > To change your delivery options, retrieve your password, or unsubscribe
> > from this list, visit
> >
https://dev.eclipse.org/mailman/listinfo/m2e-users
> _______________________________________________
> m2e-users mailing list
> m2e-users@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
>
https://dev.eclipse.org/mailman/listinfo/m2e-users

Back to the top