#java #tomcat #ant #setup-project #disaster-recovery
#java #tomcat #ant #настройка-проект #аварийное восстановление
Вопрос:
Мне нужны несколько советов, чтобы понять, что делать и как понять довольно сломанный проект, который я никогда не видел. Это проект Java 5 с сервлетами и jsp, и похоже, что он был построен в 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 это выглядит так:
Каждый каталог, начинающийся с numbers, имеет каталог 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
Мне нужно запустить его, но я действительно не знаю, как действовать дальше или где искать. Любой совет, помогающий мне избежать атаки hearth, будет в значительной степени оценен.
Ответ №1:
«Запустив это»
Ant состоит из целей. Один скрипт содержит много целевых объектов, и вы должны указать один, например ant build
, — который указывает «запустить build
цель».
Какую цель вы выполнили?
Если вы просто вводите ant
, и в верхней строке вашего файла ant отображается опция по умолчанию ( <project name="something" default="some-target" ....>
), то выполняется это значение по умолчанию.
Этот сценарий ant очень неполный; есть много целей с описанием, но которые абсолютно ничего не делают, например build-subprojects
, поэтому эти вещи явно не работают.
Основная идея проекта, которую я могу предположить из вставленных вами фрагментов, заключается в следующем:
- В проекте используется ecj — компилятор eclipse.
- Вместо того, чтобы извлекать ecj через Интернет, например, через Apache Ivy (дополнение для ant, которое позволяет указывать зависимости только по их имени и версии, и при необходимости оно позаботится о их загрузке из Интернета), оно … извлекает их, находя их в вашей локальной установке eclipse.
- Как только эти зависимости будут установлены, возможно, вместе с любыми другими зависимостями в
lib
каталоге, проверенными прямо в системе управления версиями (вы вставили очень мало, я прибегаю к диким догадкам здесь — обратите внимание, что проверенные двоичные файлы в системе управления версиями — плохая идея), его можно скомпилировать. - Компиляция относительно проста; возьмите все файлы java, найденные где угодно в любом каталоге sub (subsubsub) любого из каталогов src, перечисленных в верхней части вашего фрагмента, и скомпилируйте их все, но они попадают в
WebContent/WEB-INF/classes
каталог (относительно того, гдеbuild.xml
находится файл). Ваш фрагмент не включает создание этого каталога, поэтому это тоже завершится неудачей, если этот каталог уже не существует. Возможно, это тоже было ошибочно проверено в системе управления версиями.
Итак, чтобы воссоздать эту сборку шаг за шагом:
- Загрузите самую старую версию eclipse, которую вы можете найти.
- Извлеките оттуда файл org.eclipse.jdt.core_* .jar.
- скопируйте его. Кроме того, разархивируйте только тот файл
jdkCompilerAdapter.jar
, который, по-видимому, находится внутри него, чтобы он находился рядом с этим файлом jar jdt.core. - выполните
<javac>
задачу вручную. Просто.. посмотрите на это, конечно, вы можете это прочитать. - Обратите внимание, что в этом проекте была альтернативная задача сборки, в которой для ее компиляции вместо компилятора javac использовался компилятор eclipse. Это странно — основное преимущество компилятора ecj заключается в том, что он имеет правильный открытый исходный код (вряд ли это проблема), быстрее (я сомневаюсь, что это было причиной) и обычно более корректен (но это означало бы, что исходные тексты были настолько экзотическими, что javac ошибочно не смог его скомпилировать. Это может произойти — например, в JDK1.5 дней
Integer x = 5; x ;
, например, сбой javac, но это также звучит маловероятно. Поэтому, вероятно, это не важно, но если вы получаете ошибки, это может быть причиной.
Комментарии:
1. Я пытался создать его извне, прежде чем выяснить, что он сгенерирован из Eclipse! В командной строке я получил это сообщение Полная последовательность сборки [build-subprojects, init, build-project, init-eclipse-compiler, clean, cleanall, build-refprojects, build, build-eclipse-compiler, ] Я пытался запустить каждую цель по порядку, но все равно не смогдобейтесь стабильной сборки. Когда я создаю (из Eclipse или Ant извне) Я продолжаю получать сообщение об ошибке об отсутствующих библиотеках: пакет javax.servlet не существует — вызов метода varargs без varargs с неточным типом аргумента для последнего параметра;
2. Мне сказали, что он был обновлен до Java 8 для Tomcat 7, поэтому я изменил свою JVM на 1.8.0_271. Eclise способен создать ВОЙНУ, хотя. Когда я его развертываю, Tomcat пишет «C:xampphtdocscodepandorautilitytomcat-startup-7webapps » а затем выключение. Я предполагаю, что война не завершена