小编Emi*_*erg的帖子

当两个链在同一个包中结束时,为什么违反了使用约束?

我有四个捆绑包,每个捆绑包只包含一个清单.捆绑是

  • app哪个进口com.example.foo.fragmentcom.example.bar
  • foo 哪个出口 com.example.foo;uses:=com.example.foo.cfg
  • foo.fragment其连接到片段foo的是出口com.example.foo.fragmentcom.example.foo.fragment.cfg;uses:=com.example.foo.fragment
  • bar哪些出口com.example.bar和进口com.example.foo

捆绑级依赖图:

app -> bar
|       |
|       v
|      foo
|       |
v       v
foo.fragment
Run Code Online (Sandbox Code Playgroud)

当我在JBoss AS 7.2中同时安装这些软件包时,它们工作得很好.但是,如果我在其他人之后安装app捆绑包,无论是第一次还是成功启动后再卸载它,都会发生以下使用约束违规:

Caused by: org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource com.example.app [HostBundleRevision[com.example.app:0.0.
0]] because it is exposed to package 'com.example.foo.fragment' from resources com.example.foo [HostBundleRevision[com.example.foo:0.0.0]] and com.example.foo [HostBund
leRevision[com.example.foo:0.0.0]] via two dependency chains.

Chain 1:
  com.example.app [HostBundleRevision[com.example.app:0.0.0]] …
Run Code Online (Sandbox Code Playgroud)

osgi apache-felix jboss7.x

151
推荐指数
1
解决办法
7333
查看次数

Eclipse IDE视图消失了 - 如何取回它

我基本上有多个显示器,今天做了一些改变.因此,我的一个监视器(特别是控制台视图)上的视图不再存在.我似乎无法找到恢复它的方法.

控制台视图显示在Window -> Open view,此菜单选项将焦点从其他打开的视图移开,但控制台视图不会出现在屏幕上.这可能意味着它位于显示器之外......

我怎样才能看到这个视图?

eclipse

79
推荐指数
4
解决办法
6万
查看次数

从证书DN中解析CN

首先让我说这是一个美学问题.我已经解决了自己的问题,我只是对更好的方法感到好奇.

所以,我有一个DN证书,如下所示:

CN = Jimmy Blooptoop,OU = Someplace,OU = Employees,DC = Bloopsoft-Inc

现在,我想从中获取CN.在java中,除了使用Xoun9证书中的完整DN而没有使用像bouncy castle这样的第三方库时,没有原生支持可以抓取任何东西 - 我无法使用它.所以我必须解析它,这不是什么大问题.唯一让它有点棘手的事实是CN并不总是被格式化为<first name> <last name>.通常情况下,它实际上会是<last name>, <first name> <middle initial>.所以,在上面的例子中,CN可能是Jimmy Blooptoop或Blooptoop,Jimmy J(当然是Joop的缩写).

在阅读了有关正则表达式的内容之后,我写了以下内容,它运作良好:

Matcher m = Pattern.compile("CN=[A-Za-z]*[, ]*[ A-Za-z]*").matcher(dn);
if (m.find())
  cn = m.group();
Run Code Online (Sandbox Code Playgroud)

我只是好奇是否有看起来不像垃圾的表情.我非常有信心,因为我在阅读了正则表达式的介绍之后就已经解决了这个问题.

java regex

26
推荐指数
4
解决办法
3万
查看次数

有没有简洁的方法来"反转"一个选项?

假设我有一个可以接受可选参数的函数,Some如果参数是None,我想返回a,如果参数是,None则返回a Some:

def foo(a: Option[A]): Option[B] = a match {
  case Some(_) => None
  case None    => Some(makeB())
}
Run Code Online (Sandbox Code Playgroud)

所以我想要做的就是反过来map.变体orElse不适用,因为它们保留了a它存在的价值.

有没有更简洁的方法来做到这一点if (a.isDefined) None else Some(makeB())

scala optional

12
推荐指数
2
解决办法
484
查看次数

如何使我的迭代器类看起来不像容器类?

前提

假设我有一个容器类Box,它提供内部类const_iteratoriterator.因为我想要一个iterator可以转换为a const_iterator,后者继承自前者:

class Box {
  // ...
public:
  class const_iterator : public std::iterator<std::random_access_iterator_tag, const int> { /* ... */ };
  class iterator : public const_iterator { /* ... */ };
  // ...
};
Run Code Online (Sandbox Code Playgroud)

问题

现在我想使用Google Test测试这些类.让我们断言,begin()并且end()不要返回相同的东西:

const Box a;
EXPECT_NE(a.begin(), a.end());
Run Code Online (Sandbox Code Playgroud)

跟编译错误打招呼:

  • 铛: no member named 'begin' in 'Box::const_iterator'
  • 克++: ‘const class Box::const_iterator’ has no member named ‘begin’

原因

一些研究让我在Google Test源代码中找到了这个模板(按照扩展文档的链接):

typedef int IsContainer; …
Run Code Online (Sandbox Code Playgroud)

c++ templates googletest c++11

9
推荐指数
1
解决办法
767
查看次数

如何在jar资源中扩展属性引用?

我正在使用Gradle构建一个包含xml文件的jar META-INF.这个文件有一行像

<property name="databasePlatform" value="${sqlDialect}" />
Run Code Online (Sandbox Code Playgroud)

允许不同的SQL数据库用于不同的环境.我想告诉gradle ${sqlDialect}从项目属性扩展.

我试过这个:

jar {
    expand project.properties
}
Run Code Online (Sandbox Code Playgroud)

但它GroovyRuntimeException似乎失败了,就像Jar任务试图扩展.class文件中的属性一样.所以我试过了

jar {
    from(sourceSets.main.resources) {
        expand project.properties
    }
}
Run Code Online (Sandbox Code Playgroud)

它不会引发上述异常,而是导致所有资源被复制两次 - 一次是属性扩展而一次是没有.我设法解决这个问题

jar {
    eachFile {
        if(it.relativePath.segments[0] in ['META-INF']) {
            expand project.properties
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我想要的,因为在我的用例中我只需要扩展META-INF目录中文件的属性.但这感觉就像一个非常丑陋的黑客,有没有更好的方法来做到这一点?

gradle

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

使用boost图库:如何通过从文件中读取边列表来创建图形

我是新手来增强图形库,我想通过从文件中读取边缘列表来创建图形.

edge_list.dat文件的示例如下:

...
123 445
4535 343
3432 454
123 345
123 566
...
Run Code Online (Sandbox Code Playgroud)

文件的每一行代表图形的边缘,每行中的两个数字是与边缘对应的节点ID.现在我想edge_list.dat使用boost图库从文件中创建一个图形.

但是,我事先并不知道图表的大小.我需要在整个过程中将顶点添加到图形中.但是,为每个顶点创建一个顶点描述符是不切实际的,如下所示:

Graph::vertex_descriptor v0 = boost::add_vertex(g);
Graph::vertex_descriptor v1 = boost::add_vertex(g);
Run Code Online (Sandbox Code Playgroud)

我想通过顶点id访问顶点.我真的不知道该怎么做.现在,我想出的解决方案是创建一个映射,其中键是id,值是vertex_descriptor:

std::map<int,Graph::vertex_descriptor> VertexList;
VertexList[123]=boost::add_vertex(g);
Run Code Online (Sandbox Code Playgroud)

但是有没有办法可以在不创建地图的情况下完成这项工作?

提前致谢.

c++ boost graph

7
推荐指数
1
解决办法
1935
查看次数

MATLAB是否优化了诊断(A*B)?

假设我有两个非常大的矩阵A(M-by-N)和B(N-by-M).我需要对角线A*B.计算完全A*B需要M*M*N次乘法,而计算它的对角线只需要M*N次乘法,因为不需要计算最终会在对角线之外的元素.

MATLAB是否实现了这种diag(A*B)自动优化和动态优化,或者我最好在这种情况下使用for循环?

matlab matrix linear-algebra

7
推荐指数
1
解决办法
392
查看次数

将案例类密封起来是一种好习惯吗?

密封类的主要原因似乎是,这允许编译器在对这些类进行模式匹配时进行彻底搜索.假设我有用于模式匹配的数据类型.玩具示例:

sealed trait Statement
case class Assign(name: String, value: Int) extends Statement
case class Print(name: String) extends Statement
case class IfZero(name: String, thenn: Statement, els: Option[Statement]) extends Statement
case class Block(statements: List[Statement]) extends Statement
Run Code Online (Sandbox Code Playgroud)

这些类的用例是通过模式匹配来使用它们:

def execute(statement: Statement): Unit = statement match {
    case Assign(name, value)      => ???
    case Print(name)              => ???
    case IfZero(name, thenn, els) => ???
    case Block(statements)        => statements foreach { execute(_) }
  }
Run Code Online (Sandbox Code Playgroud)

为此,Statement特性是sealed这样的,如果我在match语句中忘记了一个语句类型,编译器可以发出警告.但案例类怎么样?案例类不能相互继承,但特征和普通类可以.那么,密封案例类也是一种好的做法吗?如果我不这样做可能会出错?

scala

7
推荐指数
1
解决办法
4129
查看次数

如何为运行时依赖项添加Import-Package指令?

我正在使用Gradle构建一个OSGi jar,我在使用清单时遇到了一些麻烦.这是我的构建脚本的摘录:

apply plugin: 'java'
apply plugin: 'osgi'

jar {
    baseName = 'awesome'
    manifest {
        name = 'An Awesome Application'
        symbolicName = 'com.example.awesome'
//        instruction 'Import-Package', 'org.springframework.orm'
    }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,Gradle会检测我的依赖项并添加一个Import-Package包含所有编译时依赖项的函数.但是说我的应用程序也有运行时依赖性org.springframework.orm,我如何告诉Gradle将其作为参数包含在内Import-Package

如果上面的注释行未注释,则生成的Import-Package指令 指定org.springframework.orm.这让我困惑,因为在摇篮文档OsgiManifest状态

OsgiManifest instruction(String name, String... values)

为指令添加参数.如果指令不存在,则创建它.如果它存在,则参数将附加到现有参数.

但是,这似乎不适用于自动检测到的Import-Package参数.如果我指定instruction 'Import-Package', 'my.dependency.1'等等,并jar.manifest.instructions在其间打印,我可以看到它们是如何按顺序添加的,它们都出现在生成的清单中,但似乎Gradle的OSGi插件如果Import-Package手动指定则不会添加自动检测到的参数.

TL; DR:

  • 如果我不手动指定Import-Package指令,它将自动生成所有编译时依赖项,但不是运行时依赖项.
  • 如果我这样做manifest { instruction 'Import-Package', 'org.springframework.orm' },那么编译时依赖关系不会自动包含在内.

如何告诉Gradle我的运行时依赖项,以便将它们添加到Import-Package

osgi gradle bnd

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