Включить транзитивные зависимости в Liferay DXP Gradle - PullRequest
2 голосов
/ 13 июня 2019

Я написал код для Google Analytics API в Liferay DXP.Я импортировал следующие jar-файлы, записав их в build.gradle

    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 на сервере, я получаю Нерешенное требование: Import-Package: error.

Я знаю, что проблема связана с переходными зависимостями.Я где-то читал в Liferay community , что то, что мы упоминаем в build.gradle, доступно во время компиляции и не ищет транзитивные зависимости во время компиляции, но во время выполнения нам также нужны транзитивные зависимости.

Нет ли способа, чтобы Gradle мог самостоятельно загружать транзитивные зависимости, а не упоминать их по отдельности в файле build.gradle.

1 Ответ

0 голосов
/ 14 июня 2019

Если для параметра Include-Resource (или -includeresource) задано значение @some.jar, вы копируете все содержимое файла jar в свой собственный файл jar.Это инструкция по сборке.

Для времени компиляции время Gradle может идентифицировать и загружать транзитивные зависимости, но обратите внимание, что некоторые из них могут быть необязательными - в этом случае сомнительно, если вы хотите иметьторговый центр.А также: Обратите внимание, что зависимость времени компиляции не обязательно означает, что эта зависимость должна быть упакованной для времени выполнения.Фактически, упаковка, которую вы делаете с помощью IncludeResource, выполняется bnd, а не gradle вообще.

То, что вы здесь указываете, включая 30 jar в вашем собственном jar, не является лучшей практикой.Если они являются пакетами OSGi, вам следует просто развернуть их отдельно во время выполнения OSGi.Если они не являются пакетами OSGi, вам следует искать места, где они преобразуются в пакеты OSGi.И только тогда вы должны включить оставшиеся не связки в свой собственный флягу, если только вы не найдете более подходящих вариантов (например, сами превратите их в связки и отправьте пул-реквесты)

Для демонстрации: позвольте мне развернуть ваш списокjars из директивы IncludeResource, которые вы ввели в одну строку:

  • @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

Несмотря на то, что я не рекомендую продолжать включать 30 банок в свой собственный jar, есть еще один вариант для тех зависимостей, которые не являются наборами OSGi: если есть какие-либо обязательные (не обязательные) переходные зависимостиэто должно быть включено, я понимаю, что директива compileInclude для gradle будет автоматически включать их.

Недавно я записал видео о различных параметрах Gradle, которые вскоре (после правильного редактирования) будут добавлены к (бесплатному) Основам OSGi уроку по Liferay University - предварительное редактированиевидео может помочь понять, что происходит, когда вы добавляете сторонний код в свои собственные файлы jar - вы можете найти его здесь .

...