我正在尝试使用项目中的opencsv库来读取一些CSV文件。我在gradle中正确添加了这个依赖项,它似乎用于开发时间。但是在使用OSGI的部署期间出现此错误:
Unresolved requirement: Import-Package: com.opencsv;version="[3.8.0,4.0.0)"
也许我失去了基础知识。我在jar里面挖了一下并且在Manifest中自动生成出现了#34; com.opencsv; version =" [3.8.0,4.0.0)" in" Import-Package"条目。我认为我的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'
我确信解决方案可能很容易而且很愚蠢,但我无法得到它。
答案 0 :(得分:2)
我会回复自己。我希望这对其他人有所帮助。
对于那些类型的库,你必须做这件事:
在项目的bundle.gradle中添加
bundle {
exclude group: 'group.of.package'
instruction 'Bundle-ClassPath', '.,nameofjar.jar'
instruction 'Embed-Transitive', 'true'}
刷新Gradle依赖项
从服务器中删除失败的捆绑包。
清理并构建和部署。
我希望这适合你。如果没有尝试联系我并尝试帮助。
答案 1 :(得分:1)
如果您使用liferay gradle插件或bnd gradle插件,另一个选择是将bnd.bnd
文件添加到您的模块并将此指令放在那里
Private-Package: \
<your.package.name>.*,\
com.opencsv.*
这样您就不需要bundle {...}
块。私有包将所有引用的文件复制到您的文件jar中,这些类将在您的包执行期间可用。这是more reference on the Private-Package:
instruction。
答案 2 :(得分:0)
尝试将Import-Package: *; version="0";resolution:=optional
添加到您的bnd文件中。它解决了我的问题,希望也能解决您的问题。