繁体   English   中英

老Tomcat-Java-Ant项目恢复

[英]Old Tomcat - Java - Ant project recovery

我需要一些建议才能知道该怎么做以及如何理解一个我从未见过的非常糟糕的项目。 这是一个带有 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 因为它有点像 2 个不同的项目。 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

我需要让它运行,但我真的不知道如何进行或在哪里查看。 任何帮助我避免心脏病发作的建议都将不胜感激。

“通过运行这个”

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

你跑了哪个目标?

如果您只输入ant ,并且您的 ant 文件的第一行列出了一个默认选项( <project name="something" default="some-target" ....> ),则运行该默认选项。

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

我可以从您粘贴的内容中推测该项目的基本思想是:

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

因此,要逐步重新创建此构建:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM