【问题标题】:Deploying Dependent Projects to Tomcat via WTP通过 WTP 将依赖项目部署到 Tomcat
【发布时间】:2012-02-11 16:04:46
【问题描述】:

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

我们的项目布局有一个“网络”项目和一个“模块”项目。

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

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

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

【问题讨论】:

    标签: java eclipse ivy eclipse-wtp ivyde


    【解决方案1】:

    我不知道这是否会有所帮助,我不完全理解您的问题。

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

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

      resources/WEB-INF/lib/[artifact]-[type]-[revision].[ext]

    【讨论】:

    • 感谢您抽出宝贵时间提供帮助。这不是我想要的,我真的不需要 IvyDE 为我做解析,在本地缓存中引用它们很好,WTP deploy 将从 IvyDE 创建的库中部署它们。问题是“模块”项目引用的库将部署在 WTP 为“模块”项目创建的 jar 中,而不是部署到“网络”项目的战争的 WEB-INF/lib 中。我正在尝试找到一个解决方案,它不需要我将“模块”项目合并到“网络”项目中来让 WTP 部署工作。
    【解决方案2】:

    我相信我们的配置与您尝试设置的配置类似。确保在 Preferences > Ivy > Classpath 窗格中选中了“Resolve dependencies in workspace”。

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

    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" />
    

    War 项目的 .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>
    

    War 项目的 .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 设置所有这些...

    【讨论】:

      猜你喜欢
      • 2013-01-02
      • 1970-01-01
      • 2017-04-05
      • 2013-01-21
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多