小编Emi*_*erg的帖子

为什么bnd为仅在方法体中使用的包添加uses指令?

我有一个带有单个源文件的项目,在此完整列出:

package com.acme.el;

public class ExpressionUtils {
    public static Object evaluate() {
        new org.apache.commons.el.ExpressionEvaluatorImpl();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

功能与问题无关.当我使用Gradle将项目构建为OSGi包时,清单包含以下指令:

Export-Package: com.acme.el;uses:="org.apache.commons.el";version="1.0"
Run Code Online (Sandbox Code Playgroud)

令我感到困惑的是该uses指令.正如我已经理解了该指令,它意味着定义其他包的依赖关系,这些包需要传播到导入这个导出包的其他包 - 例如,如果我的类定义或方法签名引用org.apache.commons.el包中的类.但是在这个类中,依赖性org.apache.commons.el完全包含方法体内.它没有在API中公开,也没有其他的bundle导入com.acme.el可以获得ExpressionEvaluatorImpl在方法中创建的实例的保留.所以依赖不应该传播,对吧?

我是否误解了该uses指令的含义,还是在这里使用它是不必要的?

我做了一个最小的例子GitHub repo for reproduction,你可以在Eclipse中克隆和导入Gradle项目.

osgi gradle bnd

6
推荐指数
1
解决办法
1447
查看次数

如何在Java中保持List索引的固定

我想保持Java列表中项目的索引是固定的.

示例代码:

import java.util.ArrayList;
public class Test {
    public static void main(String[] args) {
        ArrayList<Double> a = new ArrayList<Double>();
        a.add(12.3);
        a.add(15.3);
        a.add(17.3);

        a.remove(1);
        System.out.println(a.get(1));
    }
}
Run Code Online (Sandbox Code Playgroud)

这将输出17.3.问题是17.3在索引2上,现在它在索引1上!

有没有办法在删除元素时保留其他元素的索引?或者是否有另一类更适合此目的?

注意:我不想要固定大小的Collection.

java indexing collections list fixed

5
推荐指数
2
解决办法
4846
查看次数

如何在OSGi包中使用Spring bean?

我有一个应用程序,我必须使用Spring根据OSGi包中的一些业务条件加载bean.这个bean不用于导出,用于计算inisde我的包.基本上我有一个实际的服务组件,它被导出,并且它必须在内部使用这个Spring bean.但...

  1. 当我使用Spring DM时,扩展程序在单独的线程中加载应用程序上下文.如何访问我的包中的上下文文件?
  2. 如何确保扩展程序线程完成加载应用程序上下文,以便我可以在我的包中使用它?
  3. 我不想像Spring DM那样将应用程序上下文导出为服务,因为它仅在我的bundle中用于内部目的.

有没有办法做到这一点?

java spring osgi spring-dm

4
推荐指数
1
解决办法
4913
查看次数

有没有办法只得到未命名的参数?

在JavaScript函数中,arguments是一个类似于数组的对象,包含函数的所有参数,无论它们是否被命名:

function f(foo, bar) {
    console.log(arguments);
}
f(1, '2', 'foo'); // [1, "2", "foo"]
Run Code Online (Sandbox Code Playgroud)

有没有办法获取未命名的参数,所以你可以做这样的事情?

function f(foo, bar) {
    console.log('foo:', foo, 'bar:', bar, 'the rest:', unnamedArguments);
}
f(1, '2', 'foo'); // foo: 1 bar: "2" the rest: ["foo"]
Run Code Online (Sandbox Code Playgroud)

但为什么?

一个真实的用例是将Angular模块作为参数注入RequireJS模块:

define([
    'angular',
    'myLibModule', // Exports an Angular module object
    'myOtherLibModule', // Exports an Angular module object
], function(angular, myLibModule, myOtherLibModule) {
    angular.module('MyApp', [myLibModule.name, myOtherLibModule.name]);
});
Run Code Online (Sandbox Code Playgroud)

由于模块依赖关系列表可能会非常大,因此很快变得非常麻烦.虽然我可以解决它

define([
    'angular',
    'underscore',
    'myLibModule', // Exports an Angular module object …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-5

3
推荐指数
1
解决办法
1000
查看次数

OSGI:是否可以在不激活bundle的情况下导入包?

是否可以在不调用其激活器的情况下从另一个包中导入包?此包不是任何包初始化所必需的.我知道这是糟糕的设计,但我不能改变它.

例外:

org.osgi.framework.BundleException: The activator my-package.Activator for bundle my-bundle is invalid
at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:157)  
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:750)  
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:352)  
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:370)  
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1068)  
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:557)  
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:464)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:248)  
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:445)  
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:220)  
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:330)
Run Code Online (Sandbox Code Playgroud)

java osgi

2
推荐指数
1
解决办法
1723
查看次数

Symfony在Web文件夹中缓存Twig模板

我有一个干净的Symfony 2.7.3安装(现在更新到2.7.4).在该app/cache/文件夹中,写入了prod和dev的普通缓存文件,但是在该/web/文件夹中有一个文件夹,1其中包含多个文件(web/1/3/7/37f3b66c84cbaf22abc4c5939452d2181eff0b0ec427c68c5499e3743849be17.php例如).

它们是缓存的Twig模板,但为什么它们存储在那里?如何让他们进入公共缓存文件夹?

我使用Windows与Xampp 1.8.2,但在几个Linux服务器上它是相同的,所以它不应该是服务器或PHP问题.希望有人能告诉我什么是错的.

caching symfony twig

2
推荐指数
1
解决办法
198
查看次数