Рестлет API перестает работать при создании.exe
Я делаю Java-приложение, которое использует Restlet для создания restful API. Он работает довольно хорошо при запуске из Eclipse, но всякий раз, когда я генерирую файл.exe (с exe4j) и запускаю его оттуда, restful API перестает работать, показывая Not found
ошибка (10.4.5 404 не найден)
Почему это происходит?
Я включаю все необходимые библиотеки при создании.exe, насколько я знаю. Это мое .xml
файл, используемый в exe4j:
<pathelement location="${lib}/com.mysql.jdbc_5.1.5.jar" />
<pathelement location="${lib}/jacob.jar" />
<pathelement location="${lib}/joda-time-2.3.jar" />
<pathelement location="${lib}/json-simple-1.1.1.jar" />
<pathelement location="${lib}/junit-4.11.jar" />
<pathelement location="${lib}/log4j-api-2.0.1.jar" />
<pathelement location="${lib}/log4j-core-2.0.1.jar" />
<pathelement location="${lib}/mail.jar" />
<pathelement location="${lib}/ojdbc6.jar" />
<pathelement location="${lib}/org.restlet.jar" />
<pathelement location="${lib}/pdfbox-app-1.8.0.jar" />
<pathelement location="${lib}/sigar.jar" />
<pathelement location="${lib}/sqlite-jdbc-3.7.2.jar" />
<pathelement location="${lib}/guava-17.0.jar" />
<pathelement location="${lib}/zeromq.jar" />
В случае, если это вообще актуально, вот как я создаю маршруты:
/* Creates a root Restlet that will receive all incoming calls.*/
@Override
public Restlet createInboundRoot() {
// Create a router Restlet that routes each call to the relevant instance
Router router = new Router(getContext());
// Defines routes
router.attach("/users", UsersController.class);
router.attach("/departments", DepartmentsController.class);
router.attach("/absences", AbsencesController.class);
router.attachDefault(RestDefault.class);
return router;
}
1 ответ
Решение
Трудно сказать, я не знаю exe4j.
Я вижу, что вы используете exe4jc.exe
с банками из ${lib}
но вы не ссылаетесь на ${dist}/${ant.project.name}.jar
, Так что, похоже, ваш код build не попадет в исполняемый файл. По этой причине сервер не может его найти (404).
<!-- Put everything in ${build} into the <Project>.jar file -->
<jar jarfile="${dist}/${ant.project.name}.jar" basedir="${build}"/>
<!-- Copy MY program into lib to get packed by exe4jc -->
<copy file="${dist}/${ant.project.name}.jar" todir="${lib}"/>
<!-- Create an exe -->
<apply executable="c:\Program Files\exe4j\bin\exe4jc.exe" failonerror="true">
<fileset dir="${lib}">
<patternset>
<include name="${ant.project.name}.exe4j"/>
</patternset>
</fileset>
</apply>