gpt4 book ai didi

gradle - 在 Liferay DXP Gradle 中启用传递依赖

转载 作者:行者123 更新时间:2023-12-03 03:26:16 27 4
gpt4 key购买 nike

我在 Liferay DXP 中为 Google Analytics API 编写了代码。我通过在 build.gradle 中写入以下 jars

    compile group: 'commons-logging', name: 'commons-logging', version: '1.1.1'
compile group: 'com.google.api-client', name: 'google-api-client', version: '1.22.0'
compile group: 'com.google.api-client', name: 'google-api-client-appengine', version: '1.22.0'
compile group: 'com.google.api-client', name: 'google-api-client-gson', version: '1.22.0'
compile group: 'com.google.http-client', name: 'google-http-client-jackson2', version: '1.22.0'
compile group: 'com.google.api-client', name: 'google-api-client-java6', version: '1.22.0'
compile group: 'com.google.api-client', name: 'google-api-client-servlet', version: '1.22.0'
compile group: 'com.google.apis', name: 'google-api-services-analytics', version: 'v3-rev132-1.22.0'
compile group: 'com.google.http-client', name: 'google-http-client', version: '1.22.0'
compile group: 'com.google.http-client', name: 'google-http-client-appengine', version: '1.22.0'
compile group: 'com.google.http-client', name: 'google-http-client-gson', version: '1.22.0'
compile group: 'com.google.http-client', name: 'google-http-client-jackson2', version: '1.22.0'
compile group: 'com.google.http-client', name: 'google-http-client-jdo', version: '1.22.0'
compile group: 'com.google.oauth-client', name: 'google-oauth-client', version: '1.22.0'
compile group: 'com.google.oauth-client', name: 'google-oauth-client-appengine', version: '1.22.0'
compile group: 'com.google.oauth-client', name: 'google-oauth-client-java6', version: '1.22.0'
compile group: 'com.google.oauth-client', name: 'google-oauth-client-jetty', version: '1.22.0'
compile group: 'com.google.oauth-client', name: 'google-oauth-client-servlet', version: '1.22.0'
compile group: 'com.google.code.gson', name: 'gson', version: '2.1'
compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.0.1'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.1.3'
compile group: 'javax.jdo', name: 'jdo2-api', version: '2.3-eb'
compile group: 'org.mortbay.jetty', name: 'jetty', version: '6.1.26'
compile group: 'org.mortbay.jetty', name: 'jetty-util', version: '6.1.26'
compile group: 'com.google.code.findbugs', name: 'jsr305', version: '1.3.9'
compile group: 'javax.transaction', name: 'transaction-api', version: '1.1'
我还使用以下代码在 bnd.bnd 文件中包含了相同的内容:
Include-Resource: @google-api-client-1.22.0.jar,@google-http-client-1.22.0.jar,@google-api-client-java6-1.22.0.jar,@google-http-client-jackson2-1.22.0.jar,@google-http-client-gson-1.22.0.jar,@google-oauth-client-1.22.0.jar,@google-oauth-client-java6-1.22.0.jar,@gson-2.1.jar,@google-api-services-analytics-v3-rev132-1.22.0.jar,@jackson-core-2.1.3.jar,@commons-logging-1.1.1.jar,@google-api-client-appengine-1.22.0.jar,@google-api-client-gson-1.22.0.jar,@google-api-client-servlet-1.22.0.jar,@google-api-services-analytics-v3-rev132-1.22.0.jar,@google-http-client-appengine-1.22.0.jar,@google-http-client-jackson2-1.22.0.jar,@google-http-client-jdo-1.22.0.jar,@google-oauth-client-appengine-1.22.0.jar,@google-oauth-client-jetty-1.22.0.jar,@google-oauth-client-servlet-1.22.0.jar,@gson-2.1.jar,@httpcore-4.0.1.jar,@jackson-core-2.1.3.jar,@jdo2-api-2.3-eb.jar,@jetty-6.1.26.jar,@jetty-util-6.1.26.jar,@jsr305-1.3.9.jar,@transaction-api-1.1.jar
该模块编译得很好,我可以得到 jar。但是当我在服务器上部署这个 jar 时,我不断收到 Unresolved 需求:进口包装:错误。
我知道问题出在传递依赖项上。我在 Liferay community 上某处读到我们在 build.gradle 中提到的东西在编译时可用,它不会在编译时寻找传递依赖,但在运行时我们也需要传递依赖。
Gradle 是否有任何方法可以自行下载传递依赖项,而不是我在 build.gradle 文件中单独提及它们。

最佳答案

使用包含资源(或 -includeresource)指定 @some.jar ,您将所有 jar 的内容复制到您自己的 jar 中。这是一个构建指令。

对于编译时,gradle 可以识别和下载传递依赖项,但请注意其中一些可能是可选的——在这种情况下,如果你想拥有它们是有问题的。另外:请注意,编译时依赖项并不一定意味着必须为运行时打包此依赖项。实际上,您使用 IncludeResource 进行的打包是由 bnd 完成的,而不是由 gradle 完成的。

您在此处指定的内容(包括您自己的 jar 中的 30 个 jar)并不是最佳实践。如果它们是 OSGi 包,您应该将它们单独部署到 OSGi 运行时。如果它们不是 OSGi 包,您应该寻找将它们转换为 OSGi 包的地方。只有这样你才应该在你自己的 jar 中包含剩余的非捆绑包,除非你找到更好的选择(例如,自己将它们变成捆绑包并向上游发送拉取请求)

为了演示:让我从 IncludeResource 指令展开您的 jar 列表,您已在一行中输入:

  • @google-api-client-1.22.0.jar
  • @google-http-client-1.22.0.jar
  • @google-api-client-java6-1.22.0.jar
  • @google-http-client-jackson2-1.22.0.jar
  • @google-http-client-gson-1.22.0.jar
  • @google-oauth-client-1.22.0.jar
  • @google-oauth-client-java6-1.22.0.jar
  • @gson-2.1.jar
  • @google-api-services-analytics-v3-rev132-1.22.0.jar
  • @jackson-core-2.1.3.jar
  • @commons-logging-1.1.1.jar
  • @google-api-client-appengine-1.22.0.jar
  • @google-api-client-gson-1.22.0.jar
  • @google-api-client-servlet-1.22.0.jar
  • @google-api-services-analytics-v3-rev132-1.22.0.jar
  • @google-http-client-appengine-1.22.0.jar
  • @google-http-client-jackson2-1.22.0.jar
  • @google-http-client-jdo-1.22.0.jar
  • @google-oauth-client-appengine-1.22.0.jar
  • @google-oauth-client-jetty-1.22.0.jar
  • @google-oauth-client-servlet-1.22.0.jar
  • @gson-2.1.jar(哎呀,重复了)
  • @httpcore-4.0.1.jar
  • @jackson-core-2.1.3.jar
  • @jdo2-api-2.3-eb.jar
  • @jetty-6.1.26.jar
  • @jetty-util-6.1.26.jar
  • @jsr305-1.3.9.jar
  • @transaction-api-1.1.jar

  • 虽然我不鼓励在你自己的 jar 中包含 30 个 jar,但对于那些不是 OSGi Bundles 的依赖项还有另一种选择:如果需要包含任何必需的(非可选的)传递依赖项,我理解gradle 的 compileInclude 指令将自动包含它们。

    我最近录制了一个关于不同 gradle 选项的视频,很快(经过适当的编辑)将被添加到(免费) OSGi Basics Liferay 大学的类(class) - 视频的初步编辑可能有助于了解当您在自己的 jar 中包含第三方代码时会发生什么 - 您可以 find it here .

    关于gradle - 在 Liferay DXP Gradle 中启用传递依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56581002/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com