问题描述
我需要一些建议,以了解如何做以及如何理解一个我从未见过的非常破烂的项目。 这是一个带有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个不同的程序包。不知道这是怎么工作的。 通过运行此命令,它将创建一个“输出”目录,但没有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 build
-指定“运行build
目标”。
您运行了哪个目标?
如果您仅键入ant
,并且ant文件的第一行列出了默认选项(<project name="something" default="some-target" ....>
),则将运行该默认选项。
此ant脚本非常不完整;有许多目标带有说明,但绝对没有任何作用,例如build-subprojects
,因此这些事情显然不起作用。
我可以从粘贴的内容中推测出的项目的基本思想是:
- 该项目使用ecj-eclipse编译器。
- 而不是通过互联网(例如)获取ecj Apache Ivy(蚂蚁插件,可让您仅通过依赖项的名称和版本来指定依赖项,如果需要,它将负责从网络上下载依赖项),...通过从您的目录中找到它们来获取它们本地日食安装。
- 一旦这些依赖关系到位,就可能与
lib
dir中的任何其他依赖关系一起直接检查到源代码控制中(您粘贴得很少,我在这里求助于疯狂的猜测-请注意,已检查的二进制文件进入源代码管理是一个坏主意),可以对其进行编译。 - 编译相对简单;提取在代码段顶部列出的所有src目录的任何sub(subsubsub)dir中任何位置找到的所有Java文件,并将其全部编译,但是它们会转到
WebContent/WEB-INF/classes
目录(相对于{{ 1}}文件是)。您的代码段不包括创建该目录,因此除非该目录已经存在,否则它也将失败。也许也被错误地检查到源代码管理中。
因此,要逐步重新创建此构建:
- 下载您可以找到的最旧版本的Eclipse。
- 从那里获取org.eclipse.jdt.core _ *。jar文件。
- 复制过来。另外,仅解压缩显然位于其中的文件
build.xml
,使其位于该jdt.core jar文件旁边。 - 手动执行
jdkCompilerAdapter.jar
任务。只是..看看它,您一定可以阅读。 - 请注意,此项目还有一个替代的构建任务,其中使用eclipse编译器而不是javac编译器进行编译。这很奇怪-ecj编译器的主要好处是它是正确的开源文件(不太可能引起关注),速度更快(我怀疑这是原因),而且通常更正确(但这暗示着这些源代码太奇怪了) ,javac错误地未能编译它,这可能发生-在JDK1.5天内,
<javac>
会使javac崩溃,但这听起来不太可能,因此,它可能并不重要,但是如果您出现错误,这可能就是原因。