У Gradle есть класс OsgiManifest
, который представляет собой расширенный манифест jar:
https://docs.gradle.org/current/javadoc/org/gradle/api/plugins/osgi/OsgiManifest.html
На StackOverflow есть сообщение, в котором показано подобное использование:
Как добавить инструкции Import-Package для зависимостей среды выполнения?
Соответствующий блок Gradle выглядит так:
apply plugin: 'java'
apply plugin: 'osgi'
jar {
baseName = 'awesome'
manifest {
name = 'An Awesome Application'
symbolicName = 'com.example.awesome'
instruction 'Import-Package', 'org.springframework.orm', '*'
}
}
Если у вас есть существующие манифесты и вы хотите использовать свои собственные пользовательские файлы, вы можете сделать это, задав расположение файла манифеста в закрытии jar:
jar {
manifest {
def manif = "${resourcesDir}/MANIFEST.MF"
if (new File(manif).exists()) {
from file(manif)
}
else{
name = 'overwrittenSpecialOsgiName'
instruction 'Private-Package', 'org.mycomp.somepackage'
instruction 'Bundle-Vendor', 'MyCompany'
instruction 'Bundle-Description', 'Platform2: Metrics'
}
}
}
Документацию по манифесту Gradle можно найти здесь: https://docs.gradle.org/current/javadoc/org/gradle/api/java/archives/Manifest.html
Ваш "другой вопрос":
Существуют дополнительные плагины Gradle для создания пакетов OSGI, в некоторых случаях включая зависимости от других пакетов OSGI.
Например, есть плагин Gradle Bundle, который использует инструмент bnd и позволяет вам указать включить транзитивные зависимости и даже исключить нежелательные. Например:
jar {
manifest {
attributes 'Implementation-Title': 'Bundle Quickstart', // Will be added to manifest
'Import-Package': '*' // Will be overwritten by the instuctions below
}
}
bundle {
includeTransitiveDependencies = true
instructions << [
'Bundle-Activator': 'foo.bar.MyBundleActivator',
'Import-Package': 'foo.*',
'-sources': true
]
instruction 'Export-Package', '*' // Specify an individual instruction
instruction '-wab', ''
}
Существует также плагин Gradle osgi-run, который по умолчанию включает транзитивные зависимости:
dependencies {
// all your usual dependencies
...
osgiRuntime( "your:dependency:1.0" ) {
transitive = false // transitive dependencies not included in OSGi runtime
}
}
Надеюсь, этого достаточно, чтобы вы начали.
person
pczeus
schedule
28.03.2016
build.gradle
, это огромная работа обезьяны. Эти файлы могут измениться до того, как сборка Gradle начнет работать и будет принята в качестве основного метода доставки. - person Paul Verest   schedule 29.02.2016jar
из JDK берет файл манифеста с помощью переключателя-m
, я был бы очень удивлен, если бы задача Gradle каким-то образом не раскрывала эту опцию. - person Neil Bartlett   schedule 29.02.2016jar
позволяет предоставить предопределенный манифест в виде файла. Быстро проверив документы Gradle, похоже, что задача Jar имеет свойствоmanifest
, которое вы можете использовать. Что-то вродеManifest.from(filename)
. - person Neil Bartlett   schedule 29.02.2016