通过WTP将依赖项目部署到Tomcat

时间:2012-01-16 18:37:42

标签: java eclipse ivy eclipse-wtp ivyde

我们目前正在使用MyEclipse在开发期间将项目部署到Tomcat。我们想转储MyEclipse并切换到WTP。我正在使用Eclipse 3.7。

我们的项目布局有一个'web'项目和一个'modules'项目。

我希望能够让每个项目都有自己的常春藤文件,使用IvyDE声明其依赖关系来创建依赖于这些jar的Eclipse库,并将这些jar部署到WEB-INF / lib以及每个项目的类部署到WEB-INF / classes。

我尝试将'modules'项目声明为“Utility Module”,将iars.xml文件中的jar声明作为WEB-INF / lib部署程序集的一部分,然后将'modules'项目添加到'web'项目的部署程序集,但我得到的是'web'项目的WEB-INF / lib中名为'modules.jar'的jar,其中包含'modules'项目的jar( ie modules.jar)WEB-INF / lib目录。

是否有可能从应用程序结构部署WTP到我想要的部署布局,或者我必须将我的两个项目重组为一个?如果是这样,我该怎么做?

2 个答案:

答案 0 :(得分:1)

我不知道这是否有帮助,我完全不了解你的问题。

您可以告诉ivyDe将所有jar下载到特定目录。

  1. 选中“Do retrieve ...”框
  2. 将WEB-INF / lib的相对路径放入检索模式,如:

    资源/ WEB-INF / LIB / [工件] - [类型] - [修改] [EXT]

  3. enter image description here

答案 1 :(得分:1)

我相信我们的配置与您尝试设置的配置类似。确保在首选项>中选中了“在工作区中解析依赖项”。常春藤>类路径窗格。

通过下面的设置,将WarProject添加到Tomcat时,您应该在WarProject节点上看到[+]链接并展开它应该显示JarProject节点。发布时,您应该看到JarProject.jar,其中ivy.xml中定义的任何jar都添加到Tomcat发布目录中的wtpwebapps/WarProject/WEB-INF/lib,对我来说,它位于我的工作区目录下的.metadata/.plugins/org.eclipse.wst.server.core/tmp0。< / p>

Jar项目的.settings / org.eclipse.wst.common.project.facet.core.xml:

<faceted-project>
  <fixed facet="jst.java" />
  <fixed facet="jst.utility" />
  <installed facet="jst.java" version="1.6" />
  <installed facet="jst.utility" version="1.0" />
</faceted-project>

Jar项目的.settings / org.eclipse.wst.common.component:

<project-modules id="moduleCoreId" project-version="1.5.0">
  <wb-module deploy-name="JarProject">
    <wb-resource deploy-path="/" source-path="/src" />
    <wb-resource deploy-path="/" source-path="/resources" />
  </wb-module>
</project-modules>

Jar项目的ivy.xml:

<ivy-module
    version="2.0"
    xmlns:m="http://ant.apache.org/ivy/maven"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
  <info module="JarProject" organisation="org.whatever" revision="${revision}" />
  <configurations>
      <conf name="local" visibility="private"
        description="Artifacts necessary for local development and testing" />
      <conf name="master" />
      <conf name="sources" />
  </configurations>
  <publications>
      <artifact ext="pom" type="pom" />
      <artifact ext="jar" type="jar" conf="master" />
      <artifact ext="jar" type="source" conf="sources" m:classifier="sources" />
  </publications>

  <dependencies defaultconfmapping="*->master(default),runtime()">
    <dependency org="org.jdom" name="jdom" rev="1.0" conf="master" />
    <dependency org="junit" name="junit-dep" rev="4.9" conf="local" />
  </dependencies>
</ivy-module>

战争项目的.settings / org.eclipse.wst.common.project.facet.core.xml:

<faceted-project>
  <fixed facet="jst.java" />
  <fixed facet="jst.web" />
  <installed facet="jst.java" version="1.6" />
  <installed facet="jst.web" version="2.5" />
  <runtime name="Apache Tomcat v6.0" />

战争项目的.settings / org.eclipse.wst.common.component:

<project-modules id="moduleCoreId" project-version="1.5.0">
  <wb-module deploy-name="WarProject">
    <property name="context-root" value="WarProject" />
    <wb-resource deploy-path="/" source-path="/WebContent" />
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src" />
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/resources" />
  </wb-module>
</project-modules>

战争项目的.classpath:

<classpath>
  <classpathentry kind="output" path="bin" />
  <classpathentry kind="src" path="src" />
  <classpathentry kind="src" path="resources" />
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
    <attributes>
      <attribute name="owner.project.facets" value="jst.java" />
    </attributes>
  </classpathentry>
  <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0">
    <attributes>
      <attribute name="owner.project.facets" value="jst.web" />
    </attributes>
  </classpathentry>
  <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?ivyXmlPath=ivy.xml&amp;confs=local&amp;ivySettingsPath=%24%7Bworkspace_loc%3AWarProject%2Fivysettings.xml%7D&amp;loadSettingsOnDemand=false&amp;propertyFiles=" />
  <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?ivyXmlPath=ivy.xml&amp;confs=master&amp;ivySettingsPath=%24%7Bworkspace_loc%3AWarProject%2Fivysettings.xml%7D&amp;loadSettingsOnDemand=false&amp;propertyFiles=">
    <attributes>
      <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib" />
    </attributes>
  </classpathentry>
  <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container" />
</classpath>

战争项目的ivy.xml:

<ivy-module
    version="2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
  <info module="WarProject" organisation="org.whatever" revision="${revision}" />
  <configurations>
    <conf name="local" visibility="private"
      description="Artifacts necessary for local development and testing" />
    <conf name="master" />
  </configurations>

  <dependencies defaultconfmapping="*->master(default),runtime()">
    <dependency org="org.whatever" name="JarProject" rev="latest.integration" changing="true" conf="master" />
    <!-- and other dependencies of the war project -->
  </dependencies>
</ivy-module>

我还发现可以省略Ivy类路径容器的类路径条目中的org.eclipse.jst.component.dependency属性,而是将其添加到org.eclipse.wst.common.component文件中,如下所示:

<dependent-module deploy-path="/WEB-INF/lib" handle="module:/classpath/con/org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?ivyXmlPath=ivy.xml&amp;confs=master&amp;ivySettingsPath=%24%7Bworkspace_loc%3AWarProject%2Fivysettings.xml%7D&amp;loadSettingsOnDemand=false&amp;propertyFiles=">
  <dependency-type>consumes</dependency-type>
</dependent-module>

但是在这种替代方案中,如果我更改了ivy.xml并运行了解决方案,部署的webapp并没有很好地更新。此外,对Ivy的URL参数的任何更改都需要与这两个文件保持同步,否则将无法为部署程序集做出任何贡献。

不知道如何通过UI设置所有这些......