Как добавить jar-файл в Ant для проекта Java Web App NetBeans, чтобы он строился на Jenkins?

1

Как я уже указывал в своем предыдущем вопросе, я пытаюсь создать автоматическую систему сборки с Jenkins CI для проекта многоуровневых веб-приложений NetBeans.

Мои цели Ant целины и отлаживаются. Чистые работы, но отладка не удалась при попытке скомпилировать проект.

На выходе моей сборки Jenkins я вижу следующую команду:

[PGB Webapp] $ cmd.exe/C '"" C:\Program Files (x86)\Jenkins\tools\hudson.tasks.Ant_AntInstallation\Apache_Ant\bin\ant.bat "" -Dlibs.MySQLDriver.classpath = C : /Program Files (x86)/MySQL/MySQL Connector J/mysql-connector-java-5.1.31-bin.jar "" -Dlibs.CopyLibs.classpath = C: /Program Files/NetBeans 8.0/java/ant/extra/org-netbeans-modules-java-j2seproject-copylibstask.jar "" -Dj2ee.server.home = C: /Program Files/wildfly-8.1.0.Final "clean debug && exit %% ERRORLEVEL %%" '

И это последняя часть моего вывода: (часть, которая кажется мне самой важной)

library-inclusion-in-manifest:

-do-compile:
    [mkdir] Created dir: C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\build\empty
    [mkdir] Created dir: C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\build\generated-sources\ap-source-output
    [javac] Compiling 2 source files to C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\build\web\WEB-INF\classes
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\config\ApplicationConfig.java:6: error: package javax.ws.rs.core does not exist
    [javac] import javax.ws.rs.core.Application;
    [javac]                        ^
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\config\ApplicationConfig.java:8: error: cannot find symbol
    [javac] public class ApplicationConfig extends Application {
    [javac]                                        ^
    [javac]   symbol: class Application
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:12: error: package javax.ws.rs does not exist
    [javac] import javax.ws.rs.GET;
    [javac]                   ^
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:13: error: package javax.ws.rs does not exist
    [javac] import javax.ws.rs.Path;
    [javac]                   ^
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:14: error: package javax.ws.rs does not exist
    [javac] import javax.ws.rs.PathParam;
    [javac]                   ^
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:15: error: package javax.ws.rs does not exist
    [javac] import javax.ws.rs.QueryParam;
    [javac]                   ^
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:16: error: package javax.ws.rs does not exist
    [javac] import javax.ws.rs.Produces;
    [javac]                   ^
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:17: error: package javax.ws.rs.core does not exist
    [javac] import javax.ws.rs.core.MediaType;
    [javac]                        ^
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:19: error: cannot find symbol
    [javac] @Path("/employees")
    [javac]  ^
    [javac]   symbol: class Path
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:29: error: cannot find symbol
    [javac]     public List<Employee> find(@QueryParam("name") String name) {
    [javac]                                 ^
    [javac]   symbol:   class QueryParam
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:27: error: cannot find symbol
    [javac]         @GET
    [javac]          ^
    [javac]   symbol:   class GET
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:28: error: cannot find symbol
    [javac]     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    [javac]      ^
    [javac]   symbol:   class Produces
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:38: error: cannot find symbol
    [javac]     public Employee findById(@PathParam("id") String id) {
    [javac]                               ^
    [javac]   symbol:   class PathParam
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:36: error: cannot find symbol
    [javac]     @GET @Path("{id}")
    [javac]      ^
    [javac]   symbol:   class GET
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:36: error: cannot find symbol
    [javac]     @GET @Path("{id}")
    [javac]           ^
    [javac]   symbol:   class Path
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:37: error: cannot find symbol
    [javac]     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    [javac]      ^
    [javac]   symbol:   class Produces
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:44: error: cannot find symbol
    [javac]     public List<Employee> findByManager(@PathParam("id") String managerId) {
    [javac]                                          ^
    [javac]   symbol:   class PathParam
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:42: error: cannot find symbol
    [javac]     @GET @Path("{id}/reports")
    [javac]      ^
    [javac]   symbol:   class GET
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:42: error: cannot find symbol
    [javac]     @GET @Path("{id}/reports")
    [javac]           ^
    [javac]   symbol:   class Path
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\rest\EmployeeResource.java:43: error: cannot find symbol
    [javac]     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    [javac]      ^
    [javac]   symbol:   class Produces
    [javac]   location: class EmployeeResource
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\config\ApplicationConfig.java:17: error: method does not override or implement a method from a supertype
    [javac]     @Override
    [javac]     ^
    [javac] C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\src\java\com\edw\config\ApplicationConfig.java:22: error: method does not override or implement a method from a supertype
    [javac]     @Override
    [javac]     ^
    [javac] 22 errors

BUILD FAILED
C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\nbproject\build-impl.xml:208: The following error occurred while executing this line:
C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\nbproject\build-impl.xml:881: The following error occurred while executing this line:
C:\Program Files (x86)\Jenkins\workspace\PGB Webapp\pgb-war\nbproject\build-impl.xml:297: Compile failed; see the compiler error output for details.

Total time: 1 second
Build step 'Start Ant' marked build as failure
Finished: FAILURE

Ну, здесь важно, чтобы компилятор Java не смог найти библиотеку RESTful Web Services. Я нашел флягу, которая мне нужна, в C: /Program Files/wildfly-8.1.0.Final/modules/system/layers/base/javax/ws/rs/api/main/jaxrs-api-3.0.8.Final.jar,

У меня нет опыта работы с Ant buildtool, поэтому я искал и много об этом нашел, но я не могу понять, как добавить эту библиотеку, чтобы проект правильно строился на Jenkins.

В настоящее время мой файл build.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<project name="pgb" default="default" basedir="." xmlns:ear="http://www.netbeans.org/ns/j2ee-earproject/2">
    <description>Builds, tests, and runs the project pgb.</description>
    <import file="nbproject/build-impl.xml"/>

    <taskdef resource="net/jtools/classloadertask/antlib.xml">
      <classpath>
        <fileset dir="${basedir}/lib" includes="ant-classloader*.jar"/>
      </classpath>
    </taskdef>

    <!--Add jar to the classpath-->
    <classloader loader="system">
      <classpath>
        <fileset dir="${basedir}/lib" includes="jboss-modules.jar"/>
        <fileset dir="${basedir}/lib" includes="jaxrs-api-3.0.8.Final.jar"/>
      </classpath>
    </classloader>
</project>

Файл build-impl.xml (который импортируется) генерируется NetBeans (как вы, вероятно, уже знаете) и слишком велик для отображения здесь, кроме того, я ничего не мог изменить, потому что система могла автоматически изменить этот файл.

В любом случае, как вы можете видеть, я пытался использовать Ant Classloader, который я нашел здесь: qaru.site/questions/652730/... Но не повезло. Я даже добавил требуемый jar файл в каталог lib проекта.

Итак, мой вопрос: как мне изменить файл сборки Ant, чтобы компилятор Java не жаловался на недостающие пакеты (т.е. Отсутствовали файлы jar)?

Я также обеспокоен тем, что если я добавлю какие-либо цели в свой файл build.xml, это может привести к конфликту со всем, что объявлено в сгенерированном файле build-impl.xml. Кто-нибудь знает об этом?

Теги:
netbeans
ant
jenkins
restful-architecture

1 ответ

1
Лучший ответ

Хорошо, мой коллега узнал, что нам просто нужно скопировать частные свойства проекта NetBeans в поле "Свойства" Ant Invoke из работы Jenkins нашего проекта.

Итак, наш проект NetBeans имеет каталог, который называется private в каталоге nbproject. В этом частном каталоге есть файл private.properties. Мы взяли свойства из этого файла и скопировали его в поле "Свойства" Ant Invoke. Теперь наше поле Properties выглядит следующим образом:

libs.CopyLibs.classpath=C:/Program Files/NetBeans 8.0/java/ant/extra/org-netbeans-modules-java-j2seproject-copylibstask.jar
libs.MySQLDriver.classpath=C:/Program Files (x86)/MySQL/MySQL Connector J/mysql-connector-java-5.1.31-bin.jar

j2ee.platform.is.jsr109=true
j2ee.server.domain=C:/Wildfly/standalone
j2ee.server.home=C:/Wildfly
j2ee.server.instance=wildfly-deployer:localhost:8080#standalone&C:\\Wildfly

Теперь мы можем выполнять все команды Ant без проблем. Мы также можем развернуть веб-приложение, которое создается через Jenkins.

Если кому-то интересно, веб-службы RESTful можно найти в WildFly. Поэтому нам не нужно включать банку RESTful Web Services напрямую, все, что нам нужно, - это правильно установить свойства для сервера WildFly.

Оглядываясь назад, я бы сказал, что совсем не сложно настраивать систему непрерывной интеграции с автоматическими сборками для проекта NetBeans. Теперь, следующий шаг должен также включать автоматическое тестирование для проекта.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню