【问题标题】:Old Tomcat - Java - Ant project recovery老Tomcat - Java - Ant 项目恢复
【发布时间】:2020-10-29 10:40:35
【问题描述】:

我需要一些建议,以便了解该做什么以及如何理解一个我从未见过的非常糟糕的项目。 这是一个带有 servlet 和 jsp 的 Java 5 项目,看起来像是用 ant 构建的。

它被许多不同的人多次更新。我已经尝试在这部分应该构建它的地方启动 ant build.xml 脚本(其他人指的是库,我猜这并不重要)。

<target depends="clean" name="cleanall"/>
<target depends="build-subprojects,build-project" name="build"/>
<target name="build-subprojects"/>
<target depends="init" name="build-project">
    <javac debug="true" debuglevel="${debuglevel}" destdir="WebContent/WEB-INF/classes" includeantruntime="false" source="${source}" target="${target}">
        <src path="src/xxx_src"/>
        <src path="src/yyy_src/00_hibernate"/>
        <src path="src/yyy_src/00_jblooming"/>
        <src path="src/yyy_src/00_jblooming_waf"/>
        <src path="src/yyy_src/00_svn"/>
        <src path="src/yyy_src/05_designer"/>
        <src path="src/yyy_src/20_indexing"/>
        <src path="src/yyy_src/40_website"/>
        <src path="src/yyy_src/42_forum"/>
        <src path="src/yyy_src/50_core"/>
        <src path="src/yyy_src/52_flowork"/>
        <src path="src/yyy_src/88_JES_mailserver"/>
        <classpath refid="xxx.classpath"/>
    </javac>
</target>
<target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
<target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler">
    <copy todir="${ant.library.dir}">
        <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
    </copy>
    <unzip dest="${ant.library.dir}">
        <patternset includes="jdtCompilerAdapter.jar"/>
        <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
    </unzip>
</target>
<target description="compile project with Eclipse compiler" name="build-eclipse-compiler">
    <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
    <antcall target="build"/>
</target>

我区分 XXX 和 YYY,因为它是两个不同的项目。 Intellij 检测为 2 个不同的包。不知道这是如何工作的。 通过运行它,它会创建一个“out”目录,但没有 jar,甚至没有 .class 文件。 通过运行 Tomcat(当然)给出的例外是无法找到主类。我是新手,我很困惑。项目结构是我以前从未见过的。

由于某些原因,在实用程序内部我们有 Tomcat 服务器和一些图像。 在 src 中,我们有 2 个目录“xxx_src”和“yyy_src”,在 Intellij 中,它看起来像这样:

每个以数字开头的目录都有一个包含逻辑的 org 或 com 目录。 在 50_core 内部,我们有业务逻辑和模型,因此 Java 类按部分划分。例如:

50_core/com/yyyproject/agenda/businessLogic/AgendaAction.java
50_core/com/yyyproject/agenda/businessLogic/AgendaController.java
50_core/com/yyyproject/task/Assignment.java

我需要让它运行,但我真的不知道如何进行或在哪里查看。任何帮助我避免发生炉火袭击的建议将不胜感激。

【问题讨论】:

    标签: java tomcat ant setup-project disaster-recovery


    【解决方案1】:

    “通过运行”

    Ant 由目标组成。一个脚本包含许多目标,您必须指定一个,例如ant build - 指定“运行build 目标”。

    你跑的是哪个目标?

    如果您只键入ant,并且您的 ant 文件的第一行列出了一个默认选项 (&lt;project name="something" default="some-target" ....&gt;),那么该默认选项就会运行。

    这个蚂蚁脚本很不完整;有许多目标有描述,但绝对没有任何作用,例如build-subprojects,所以这些东西显然不起作用。

    根据您粘贴的内容,我可以推测出该项目的基本理念是:

    1. 该项目使用 ecj - eclipse 编译器。
    2. 而不是通过 Internet 获取 ecj,例如Apache Ivy(一个 ant 的附加组件,可以让您仅通过名称和版本指定依赖项,如果需要,它将负责从 Web 下载它们),它...通过从本地 eclipse 中找到它们来获取它们安装。
    3. 一旦这些依赖项就位,可能与lib 目录中的任何其他依赖项一起直接检查到源代码控制中(您粘贴的内容很少,我在此处进行了疯狂的猜测 - 请注意,已将二进制文件检查到源代码中control 是个坏主意),它可以被编译。
    4. 编译比较简单;获取在您的 sn-p 顶部列出的任何 src 目录的任何子(subsubsub)目录中的任何位置找到的所有 java 文件并将它们全部编译,但它们转到 WebContent/WEB-INF/classes 目录(相对于 @987654329 的位置) @文件是)。您的 sn-p 不包括创建该目录,因此除非该目录已经存在,否则这也会失败。可能是,也许这也被错误地签入了源代码管理。

    所以,要逐步重新创建此构建:

    1. 下载您能找到的最旧版本的 eclipse。
    2. 从那里获取 org.eclipse.jdt.core_*.jar 文件。
    3. 复制它。此外,只需解压缩显然在其中的文件 jdkCompilerAdapter.jar,使其位于该 jdt.core jar 文件旁边。
    4. 手动执行&lt;javac&gt; 任务。只是.. 看看它,你肯定能读懂它。
    5. 请注意,此项目有一个替代构建任务,其中使用 eclipse 编译器而不是 javac 编译器来编译它。这很奇怪 - ecj 编译器的主要好处是它是正确开源的(不太可能成为问题),更快(我怀疑这是原因),并且通常更正确(但这意味着来源是如此异国情调, javac 错误地无法编译它。这可能会发生 - 回到 JDK1.5 天,Integer x = 5; x++; 会导致 javac 崩溃,但这听起来不太可能。因此,它可能并不重要,但如果你得到错误,这可能就是原因。

    【讨论】:

    • 在确定它是从 Eclipse 生成之前,我尝试在外部构建它!在命令行中我收到此消息 Complete build sequence is [build-subprojects, init, build-project, init-eclipse-compiler, clean, cleanall, build-refprojects, build, build-eclipse-compiler, ] 我尝试运行每个单目标有序,但仍然无法实现稳定的构建。当我构建(从 Eclipse 或 Ant 外部)时,我不断收到有关缺少库的错误消息:package javax.servlet does not exist non-varargs call of varargs method with inexact argument type for last parameter;
    • 他们告诉我它已针对 Tomcat 7 更新为 Java 8,因此我将 JVM 更改为 1.8.0_271。 Eclise 能够构建一个 WAR。当我部署它时,Tomcat 会写入“C:\xampp\htdocs\code\pandora\utility\tomcat-startup-7\webapps”,然后关闭。我猜战争是不完整的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多