OSGI Gradle 未解决的要求:导入包:com.opencsv;版本="[3.8.0,4.0.0)" Liferay IDE 3
OSGI Gradle Unresolved requirement: Import-Package: com.opencsv; version="[3.8.0,4.0.0)" Liferay IDE 3
我正在尝试在我的项目中使用 opencsv 库来读取一些 CSV 文件。我在 gradle 中正确添加了此依赖项,它似乎在开发时使用。但是,在使用 OSGI 进行部署时会出现此错误:
Unresolved requirement: Import-Package: com.opencsv;version="[3.8.0,4.0.0)"
也许我正在失去基础知识。我在 jar 内部挖掘,在自动生成的清单中 "Import-Package" 条目中出现 "com.opencsv;version="[3.8.0,4.0.0)”。我认为我的 build.gradle
有问题:
dependencies {
compile group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.3.0"
compile group: "com.liferay.portal", name: "com.liferay.util.taglib", version: "2.1.0"
compile group: "javax.portlet", name: "portlet-api", version: "2.0"
compile group: "javax.servlet", name: "servlet-api", version: "2.5"
compile group: "jstl", name: "jstl", version: "1.2"
compile group: "org.osgi", name: "org.osgi.compendium", version: "5.0.0"
compile group: "com.opencsv", name: "opencsv", version: "3.8"
}
version = '1.0.0'
我相信这个解决方案可能很简单而且很愚蠢,但我做不到。
我会自己回复。我希望这对其他人有所帮助。
对于那些类型的库,您必须执行以下操作:
- 下载您的 jar 并将其放入您的 main/resources。
在你的bundle.gradle项目中添加
bundle {
exclude group: 'group.of.package'
instruction 'Bundle-ClassPath', '.,nameofjar.jar'
instruction 'Embed-Transitive', 'true'}
刷新Gradle依赖项
从服务器中删除失败的包。
清理、构建和部署。
我希望这对你有用。如果没有尝试联系我并尝试提供帮助。
如果您使用 liferay gradle 插件或 bnd gradle 插件,另一种选择是将 bnd.bnd
文件添加到您的模块并将此指令放在那里
Private-Package: \
<your.package.name>.*,\
com.opencsv.*
这样你就不需要 bundle {...}
块了。 private-package 会将所有引用的文件复制到您的文件 jar 中,这些 类 将在您的包执行期间可用。这里是more reference on the Private-Package:
instruction。
尝试将 Import-Package: *; version="0";resolution:=optional
添加到您的 bnd 文件中。解决了我的问题,希望也能解决你的问题
我正在尝试在我的项目中使用 opencsv 库来读取一些 CSV 文件。我在 gradle 中正确添加了此依赖项,它似乎在开发时使用。但是,在使用 OSGI 进行部署时会出现此错误:
Unresolved requirement: Import-Package: com.opencsv;version="[3.8.0,4.0.0)"
也许我正在失去基础知识。我在 jar 内部挖掘,在自动生成的清单中 "Import-Package" 条目中出现 "com.opencsv;version="[3.8.0,4.0.0)”。我认为我的 build.gradle
有问题:
dependencies {
compile group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.3.0"
compile group: "com.liferay.portal", name: "com.liferay.util.taglib", version: "2.1.0"
compile group: "javax.portlet", name: "portlet-api", version: "2.0"
compile group: "javax.servlet", name: "servlet-api", version: "2.5"
compile group: "jstl", name: "jstl", version: "1.2"
compile group: "org.osgi", name: "org.osgi.compendium", version: "5.0.0"
compile group: "com.opencsv", name: "opencsv", version: "3.8"
}
version = '1.0.0'
我相信这个解决方案可能很简单而且很愚蠢,但我做不到。
我会自己回复。我希望这对其他人有所帮助。
对于那些类型的库,您必须执行以下操作:
- 下载您的 jar 并将其放入您的 main/resources。
在你的bundle.gradle项目中添加
bundle { exclude group: 'group.of.package' instruction 'Bundle-ClassPath', '.,nameofjar.jar' instruction 'Embed-Transitive', 'true'}
刷新Gradle依赖项
从服务器中删除失败的包。
清理、构建和部署。
我希望这对你有用。如果没有尝试联系我并尝试提供帮助。
如果您使用 liferay gradle 插件或 bnd gradle 插件,另一种选择是将 bnd.bnd
文件添加到您的模块并将此指令放在那里
Private-Package: \
<your.package.name>.*,\
com.opencsv.*
这样你就不需要 bundle {...}
块了。 private-package 会将所有引用的文件复制到您的文件 jar 中,这些 类 将在您的包执行期间可用。这里是more reference on the Private-Package:
instruction。
尝试将 Import-Package: *; version="0";resolution:=optional
添加到您的 bnd 文件中。解决了我的问题,希望也能解决你的问题