Eclipse和IvyDE警告:类路径依赖验证器消息

9

我在Eclipse Kepler中创建了一个新的动态Web项目,由于这是我第一次使用IvyDE,因此我添加了一些依赖项进行测试。以下是我的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
        organisation="net.myorg"
        module="mymodule"
        status="integration">
    </info>
    <dependencies>
       <dependency org="org.hibernate" name="hibernate-entitymanager" rev="4.2.3.Final"></dependency>
       <dependency name="log4j" rev="1.2.17" org="log4j"></dependency>
    </dependencies>
</ivy-module>

依赖项已解决,我可以在项目库中看到它们。
但是在此之后,我的项目开始出现这个警告:
Description Resource    Path    Location    Type
Classpath entry org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=myproject&ivyXmlPath=ivy.xml&confs=*&acceptedTypes=jar%2Cbundle%2Cejb%2Cmaven-plugin&alphaOrder=false&resolveInWorkspace=true&retrievedClasspath=true&retrievedClasspathPattern=lib%2F%5Btype%5Ds%2F%5Bartifact%5D-%5Brevision%5D.%5Bext%5D&retrievedClasspathSync=true&retrievedClasspathTypes=* will not be exported or published. Runtime ClassNotFoundExceptions may result.      myproject       P/myproject Classpath Dependency Validator Message

如果我理解正确,Eclipse正在警告我说,类路径中的IvyDE条目与构建项目中将出现的资源不对应。我想这是预期的行为,如果是这样,是否有一种方法可以从项目中删除此警告,而不禁用每个Classpath Dependency Validator Message

1个回答

19
警告信息的原因是Eclipse灵活的项目部署机制不知道是否要部署Ivy容器引用的库。因此,您需要明确告诉它您想要做什么,是将jar部署到WEB-INF/lib还是不部署。
如果您需要将此容器部署到WEB-INF / lib,您需要执行以下操作:
  1. 右键单击项目,转到属性
  2. 选择“部署程序集”
  3. 点击“添加”
  4. 选择“Java构建路径条目”
  5. 选择Ivy容器
  6. 点击完成
  7. 确保部署路径设置为“WEB-INF / lib”

Deployment Assembly setting

如果您查看.classpath设置文件,您将看到这样添加了一个条目:

<classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=ivy-test-portlet&amp;ivyXmlPath=ivy.xml&amp;confs=*&amp;ivySettingsPath=%24%7Bliferay_sdk_dir%3Aivy-test-portlet%7D%2Fivy-settings.xml&amp;loadSettingsOnDemand=false&amp;ivyUserDir=%24%7Bliferay_sdk_dir%3Aivy-test-portlet%7D%2F.ivy&amp;propertyFiles=">
    <attributes>
        <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
    </attributes>
</classpathentry>

注意已添加<attributes>...</attributes>元素。同时,我的Ivy容器路径与你的不同,因为这是我自己项目的一个Ivy容器路径。

如果你不需要将这些包含在Ivy容器中的库部署到运行时,那么你需要告诉Eclipse在运行时没有这些库的依赖关系。你可以通过在.classpath文件中添加适当的属性来实现。

  1. 打开.classpath文件
  2. 找到Ivy容器的条目
  3. 手动添加以下属性元素作为classpathentry的子元素

最终的元素看起来会像这样。你的路径可能有不同的选项,但关键部分是属性子元素:

<classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=ivy-test-portlet&amp;ivyXmlPath=ivy.xml&amp;confs=*&amp;ivySettingsPath=%24%7Bliferay_sdk_dir%3Aivy-test-portlet%7D%2Fivy-settings.xml&amp;loadSettingsOnDemand=false&amp;ivyUserDir=%24%7Bliferay_sdk_dir%3Aivy-test-portlet%7D%2F.ivy&amp;propertyFiles=">
    <attributes>
        <attribute name="org.eclipse.jst.component.nondependency" value=""/>
    </attributes>
</classpathentry>
无论选择哪个,您都已经明确告诉了Eclipse如何在部署过程中处理此库容器的依赖关系。因此,现在您可以重新验证项目(右键单击项目并选择“验证”),然后应该会看到错误消失。

1
值得注意的是,Eclipse的“快速修复”工具可以自动执行您描述的两个过程。 - Philipp Schlösser
1
如果警告仍然存在,我该怎么办?我已经检查了部署路径设置为 WEB-INF/lib,并且 .classpath 中有 classpathentry: <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=Document+Manager&amp;ivyXmlPath=ivy.xml&amp;confs=default&amp;ivySettingsPath=%24%7Bworkspace_loc%3ADocument+Manager%2Fivysettings.xml%7D&amp;loadSettingsOnDemand=false&amp;ivyUserDir=&amp;propertyFiles="> <attributes> <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> </attributes> </classpathentry> - tonix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接