【问题标题】:How to find out which versions of JARs were used in the eclipse project如何找出 Eclipse 项目中使用了哪些版本的 JAR
【发布时间】:2020-04-09 17:21:56
【问题描述】:

我继承了一个 Eclipse 项目,它有几个依赖项。没有文档,维护者不再可用。 其中一些在项目设置中被引用,我可以下载正确的 jar 并添加它们。构建路径中没有进一步的引用。 但是现在我看到源代码中仍然存在未解决的导入,例如

import org.apache.cxf.*;
import javax.servlet.ServletContextEvent;
import javax.servlet.http.HttpServletRequest;

这是.project:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>Server</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.wst.common.project.facet.core.builder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.wst.validation.validationbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
        <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
        <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
    </natures>
</projectDescription>

和.classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/sqljdbc4.jar">
        <attributes>
            <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
        </attributes>
    </classpathentry>
    <classpathentry exported="true" kind="con" path="org.eclipse.jst.ws.cxf.core.CXF_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0"/>
    <classpathentry kind="lib" path="C:/Users/xxxx/Desktop/Server/src/libs/fontbox-1.8.16.jar"/>
    <classpathentry kind="lib" path="C:/Users/xxxx/Desktop/Server/src/libs/pdfbox-1.8.16.jar"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
        <attributes>
            <attribute name="owner.project.facets" value="java"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Users/xxxx/Desktop/Server/src/libs/log4j-1.2.17.jar"/>
    <classpathentry kind="lib" path="C:/Users/xxxx/Desktop/Server/src/libs/commons-lang-2.6.jar"/>
    <classpathentry kind="output" path="build/classes"/>
</classpath>

关于应用服务器,我用测试环境检查过,Tomcat没有什么特别的配置。

我的问题是:

  1. 为什么这些在构建路径中作为不正确的库依赖项不可见?
  2. 尤其是涉及到 cxf 时,有没有办法找出使用的版本?

【问题讨论】:

  • 这是安装在生产或测试的某个地方吗?你知道它是否应该与特定的应用程序服务器一起工作,因为 javax 部分可能来自服务器。

标签: java eclipse


【解决方案1】:

从您的配置来看,javax.servlet 是 Tomcat 6 中的 2.5 版:

 <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0"/>.

您的应用程序应该只依赖于 Tomcat 中包含的 jar。

对于 CXF,我认为您应该首先在 Eclipse 中添加一个 CXF 运行时:Preferences > WebServices > CXF.2 Preferences > CXF Runtime。不能从您报告的内容中扣除具体版本。你可以看这里:https://cxf.apache.org/download.html

您应该考虑将 Java、Tomcat 和 CXF 升级到较新的版本,因为 Tomcat 6 已经过时并且自 2017 年起就已报废。

注意:当您构建项目时,所需的 CXF jars 应该在您的战争中以 /WEB-INF/lib 结尾。如果您在 Eclipse 中的服务器中运行,它们将被放置在一个临时文件夹中,例如:

[WORKSPACE]\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\WebServiceProject\WEB-INF\lib\

【讨论】:

  • 谢谢,这已经很有帮助了。使用 CFX,我想我只能测试并希望它有效。你能详细说明你的笔记吗?这是否意味着我需要考虑在 Eclipse 中运行和部署状态之间存在差异?
  • 我的意思是,当你构建一个项目时,maven 通常将你的应用程序依赖的所有 jar 文件放在 /WEB-INF/lib 下的战争中,这样当你在 tomcat 中部署战争时服务器找到文件(不包括已在 tomcat 中找到的 jar,如 servlet 文件)。战争由tomcat在其路径中的工作目录中提取。当您通过在 Eclipse 中执行嵌入的 web 应用程序来测试它时,嵌入式 tomcat 有一个文件夹,其中保存了您在上面给出的路径中测试的每个 web 应用程序的所有文件。首先,您必须从设置中创建一个用于运行 tomcat 应用程序的服务器
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 2016-12-17
  • 2011-04-25
  • 2021-02-28
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多