Strange behavior of Eclipse WTP deployment of depe

2019-04-07 18:45发布

问题:

I have a strange behavior in the Tomcat deployment process made by my Eclipse WTP. I am using Eclipse 3.7 (Indigo), WTP 3.3, no m2eclipse plugin, Java 1.6, Tomcat 5.5.

My application is a web application that have some other projects as dependencies, as well as some third-parties dependencies. My project is managed by Maven, and everything works fine when we build the application using this tool.

To work on my project using Eclipse, I run mvn eclipse:clean eclipse:eclipse and then, I import my projects in the IDE.

My problem occurs when I want to deploy this web application on a Tomcat 5.5 server (this server is managed by Eclipse). When I create a new Tomcat server, and deploy my my-project-portal application in it, it only adds the my-project-xxx dependencies, as well as few third-parties dependencies (about 9 of the hundreds defined). On one of my colleagues desktop (he is using Eclipse 3.5), no third-parties dependency are deployed at all, just the my-project-xxx JAR...

However, when I look at the web-app project properties, in Java Build Path > Libraries, or in "Deployment Assembly", the list of dependencies is correct and complete.

Notes

I did some tests with an older Eclipse (3.3, with WTP 3.1) and I do not encounter any deployment issue. However, this WTP was still using the "Java EE Modules Dependencies", which is not the case of the latest WTP version.

Until now, we used a custom Maven plugin after the mvn eclipse:eclipse that copies all the dependencies (including transitives ones) into my-webapp-project/WebContent/WEB-INF/lib. Doing that, Eclipse automatically deployed the content of these dependencies, and thus, we got all the dependencies in the Tomcat server.

Questions

  • What is wrong with my process?
  • Do I really need to copy all the dependencies in the WEB-INF/lib directory?
  • What is the normal procedure when we want to deploy a web application on a Tomcat server, using Eclipse?

Here is an extract of my Eclipse configuration files after running mvn eclipse:eclipse:

.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src/main/java"/>
    <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>
    <classpathentry kind="var" path="M2_REPO/asm/asm/2.2.2/asm-2.2.2.jar" sourcepath="M2_REPO/asm/asm/2.2.2/asm-2.2.2-sources.jar"/>
    <classpathentry kind="src" path="/my-project-business"/>
    ...
    <classpathentry kind="output" path="WebContent/WEB-INF/classes"/>
</classpath>

.settings/org.eclipse.wst.common.component

<project-modules id="moduleCoreId" project-version="1.5.0">
  <wb-module deploy-name="my-project-portal">
    <property name="context-root" value="my-project-portal"/>
    <wb-resource deploy-path="/" source-path="/WebContent"/>
    <property name="java-output-path" value="/WebContent/WEB-INF/classes"/>
    <dependent-module deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar">
      <dependency-type>uses</dependency-type>
    </dependent-module>
    ...
    <dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/my-project-business/my-project-business">
      <dependency-type>uses</dependency-type>
    </dependent-module>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
  </wb-module>
</project-modules>

回答1:

I think you have a misconfiguration problem because:

  • If your project is managed by maven, you will never need to set your '.classpath' with the dependencies needed by this tool, for example if you need one different library or change the version of one, you will need to update the configuration in your eclipse project, etc. Idem for your 'org.eclipse.wst.common.component' file.

I think you will need to install the WTP support for m2eclipse like @stivlo says, of course install the m2eclipse and review your project configuration, because you need to remove all the dependencies defined in those files.

Right now, I never copy all the dependencies in the /WEB-INF/lib directory, because I don't want to have to keep an eye on those directory. For example, when I need to start Tomcat, the m2eclipse plug-in deploys automatically all the libraries and differences (i.e static files, classes, resource files, etc) in the internal Eclipse directory related and that's it, the server starts with the context, with all the files needed. I'm always using the plugins related in Eclipse for convenience.