我知道在OSGI包中有两种使用外部库的方法。由于只有我的包需要lib(例如google-gson),我试图将它放在Bundle-ClassPath
(manifest.mf)中。但每当我在Knopflerfish中运行捆绑包时,我得到Exception in thread "Thread-74" [stderr] java.lang.NoClassDefFoundError: com/google/gson/Gson
。
由于我是OSGI的新手,我尝试按照here创建捆绑包的说明使用build.xml
进行编译,其中我也包含了lib(不知道这是否正确)。因此,该库出现在三个不同的位置,项目类路径, bundle classpath (manifest.mf)和 build.xml 。
如果有人能给我一个如何使图书馆工作的提示,我会很高兴的。提前谢谢!
答案 0 :(得分:1)
过程如下
1.将所有.jar
个文件及其相关内容复制到文件夹
2.在BUNDLE-CLASSPATH
的{{1}}中提及。{参考this
3.将此库中的包重新添加到MANIFEST.MF
中的Export-package
元素,以使其对其他包可见。
希望这可以解决您的问题
答案 1 :(得分:0)
可能对我有用的几点提示:
from django.views.generic import CreateView, UpdateView
from my_app.forms import ProductCreateForm
from my_app.models import Product
from django.contrib.auth.models import User
class ProductCreate(CreateView):
"""Simple CreateView to create a Product with ForeignKey relation to User"""
model = Product
form_class = ProductCreateForm
template = 'product_create.html'
def form_valid(self, form):
user = User.objects.filter(username=form.cleaned_data['user_email']).first()
if user is None:
messages.error("Invalid user email specified")
return some http response here...
#How to I render the page again, but with the data already in the
#form we don't have to re-enter it all?
form.save()
messages.info("Successfully saved the product!")
return some http response here...
#How do I redirect to the UpdateView here with the Product instance
#already in the form?
class ProductUpdate(UpdateView):
model = Product
form_class = ProductCreateForm
template = 'product_create.html'
之类的行。在该行中,您应该从库中添加所需包的导入,因此它仍为Import-Package: org.osgi.framework
Import-Package: org.osgi.framework, com.google.gson
这样的导出行,所以其他捆绑包可能会看到它。已经编译和打包的库通常已经设置好了,但是我找到了一些没有经过检查的库。还要记住,可以将外部库安装到框架中,就好像它是捆绑包一样,即在init.xargs Export-Package: its.sec.api.service
已安装但未启动。
希望这有帮助