【问题标题】:Service Builder does not compile code that depends on IVY jarService Builder 不编译依赖 IVY jar 的代码
【发布时间】:2014-09-29 14:46:57
【问题描述】:

我有一个基本程序,其中包含一个用于服务构建器的简单实体,没有用于 Web 服务调用的属性。我在本地依赖 javax.ws.rs-api-2.0.1.jar 中包含的 javax.ws.rs 库。

在 IDE 中,代码没有显示任何错误。我可以在项目资源管理器窗口中看到 Ivy 依赖项。但是,当我调用 build-services 命令时,它无法使用外部 jar 中的类编译代码。

在我的应用程序中依赖 jar 时,我错过了一步吗?这不应该自动链接吗?

蚂蚁输出:

   [javac] Compiling 4 source files to C:\liferay\liferay-developer-studio\liferay-plugins-sdk-6.2\portlets\myApp-portal-portlet\docroot\WEB-INF\service-classes
    [javac] ----------
    [javac] 1. ERROR in C:\liferay\liferay-developer-studio\liferay-plugins-sdk-6.2\portlets\myApp-portal-portlet\docroot\WEB-INF\service\com\example\myApp\portal\service\ExternalApiLocalService.java (at line 69)
    [javac]     public javax.ws.rs.client.WebTarget myAppRestApi();
    [javac]            ^^^^^^^^^^^^^^^^^^
    [javac] javax.ws.rs.client cannot be resolved to a type
    [javac] ----------
    [javac] 2. ERROR in C:\liferay\liferay-developer-studio\liferay-plugins-sdk-6.2\portlets\myApp-portal-portlet\docroot\WEB-INF\service\com\example\myApp\portal\service\ExternalApiLocalService.java (at line 71)
    [javac]     public javax.ws.rs.client.WebTarget myAppRegisterService();
    [javac]            ^^^^^^^^^^^^^^^^^^
    [javac] javax.ws.rs.client cannot be resolved to a type
    [javac] ----------
    [javac] 3. ERROR in C:\liferay\liferay-developer-studio\liferay-plugins-sdk-6.2\portlets\myApp-portal-portlet\docroot\WEB-INF\service\com\example\myApp\portal\service\ExternalApiLocalService.java (at line 73)
    [javac]     public javax.ws.rs.client.WebTarget myAppValidPaService();
    [javac]            ^^^^^^^^^^^^^^^^^^
    [javac] javax.ws.rs.client cannot be resolved to a type
    [javac] ----------
    [javac] ----------
    [javac] 4. ERROR in C:\liferay\liferay-developer-studio\liferay-plugins-sdk-6.2\portlets\myApp-portal-portlet\docroot\WEB-INF\service\com\example\myApp\portal\service\ExternalApiLocalServiceClp.java (at line 127)
    [javac]     public javax.ws.rs.client.WebTarget myAppRestApi() {
    [javac]            ^^^^^^^^^^^^^^^^^^
    [javac] javax.ws.rs.client cannot be resolved to a type
    [javac] ----------
    [javac] 5. ERROR in C:\liferay\liferay-developer-studio\liferay-plugins-sdk-6.2\portlets\myApp-portal-portlet\docroot\WEB-INF\service\com\example\myApp\portal\service\ExternalApiLocalServiceClp.java (at line 146)
    [javac]     return (javax.ws.rs.client.WebTarget)ClpSerializer.translateOutput(returnObj);
    [javac]             ^^^^^^^^^^^^^^^^^^
    [javac] javax.ws.rs.client cannot be resolved to a type
    [javac] ----------
    [javac] 6. ERROR in C:\liferay\liferay-developer-studio\liferay-plugins-sdk-6.2\portlets\myApp-portal-portlet\docroot\WEB-INF\service\com\example\myApp\portal\service\ExternalApiLocalServiceClp.java (at line 150)
    [javac]     public javax.ws.rs.client.WebTarget myAppRegisterService() {
    [javac]            ^^^^^^^^^^^^^^^^^^
    ...........................etc

BUILD FAILED
C:\liferay\liferay-developer-studio\liferay-plugins-sdk-6.2\build-common-plugin.xml:262: The following error occurred while executing this line:
C:\liferay\liferay-developer-studio\liferay-plugins-sdk-6.2\build-common.xml:634: Compile failed; see the compiler error output for details.

ivy.xml:

<?xml version="1.0"?>
<ivy-module
    version="2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
>
    <info module="portlet_liferay_faces_alloy_tmpl" organisation="com.liferay" />

    <dependencies defaultconf="default">
        ...
        <dependency name="jersey-common" org="org.glassfish.jersey.core" rev="2.12" transitive="true" />
        <dependency name="jersey-client" org="org.glassfish.jersey.core" rev="2.12" transitive="true" />
        <dependency name="html-json" org="org.glassfish.jersey.media" rev="2.12" transitive="true"/>
    </dependencies>
</ivy-module>

亲切的问候, 代码。

【问题讨论】:

    标签: java ant liferay ivy


    【解决方案1】:

    您几乎自己回答了这个问题,但不是很明显:当 servicebuilder 运行时,它会执行一些需要与项目的类路径一起运行的 java 代码:ServiceBuilder 将编译/检查您的代码以生成适当的接口等等

    因此,您还需要将项目的依赖项注入到 servicebuilder 进程中。当您从 IDE 运行 servicebuilder 时,它很可能正在运行 Ant 任务,该任务将从 webapp 获取所有明显的(对 ant 而言)依赖项(例如,它在 WEB-INF/lib 和应用服务器的全局类路径中找到的内容)。 Ant 进程不会扫描任何 ivy、maven 或其他构建工具的依赖声明 - 不幸的是,您必须添加此依赖两次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 2022-01-03
      • 2012-01-11
      • 2019-06-01
      • 2015-03-12
      • 2013-06-30
      • 2015-05-29
      • 1970-01-01
      相关资源
      最近更新 更多