小编Dan*_*ell的帖子

如何在Scala中对数组进行排序?

我可以看到有一个排序对象Sorting,有一个快速排序方法quickSort,就可以了.

什么是使用它的代码示例,排序任意类型的对象数组?看起来我需要传递Orderable特征的实现,但我不确定语法.

另外,我更喜欢以"Scala方式"做到这一点的答案.我知道我可以使用Java库.

sorting scala

80
推荐指数
5
解决办法
7万
查看次数

如何在Linux中签署Mac OS X应用程序?

对于OS X,我将我的Java应用程序分发到DMG中.自Mountain Lion发布以来,打开应用程序会出现以下错误消息:

[app name]已损坏,无法打开.您应该弹出磁盘映像.

显然,修复是签署.app文件,所以我阅读了代码签名指南.除了如何将其集成到我的一键构建过程中的重要问题之外,一切似乎都很简单.

在所有平台上构建我的产品都发生在我的Linux开发机器上.我运行一个Ant脚本,Windows安装程序,启动器EXE,Linux安装程序,OS X应用程序和DMG都是构建的.所以我想将代码签名集成到这个过程中.

是否有相当于Linux的'codesign'?

java linux code-signing osx-mountain-lion

14
推荐指数
1
解决办法
6687
查看次数

如何在Liquid中对转换为数组的哈希进行排序

我的理解是Liquid将Ruby Hashes转换为数组以用于标记.例如,使用Jekyll时:

{% for category in site.categories %}
    <li>{{ category[0] }}</li>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

...将site.categories转换为元组数组,其中[0]表示键,[1]表示值.

如果我想通过键(每个元组的[0])按字母顺序对上面的类别映射进行排序,我该怎么办?

liquid jekyll

11
推荐指数
3
解决办法
6251
查看次数

将OSGi包分组以形成连贯的"应用程序"的最佳方法是什么?

"OSGi方式"是开发包含离散,连贯功能的单独包.有时这些bundle包含实用程序类,有时它们依赖于实用程序类并设置自己的OSGi服务.

另一方面,用户不太可能接触到捆绑包.他们更关心应用程序,一个执行任务或解决问题的软件.通常,应用程序将使用多个包(例如,通过Import-Package导入)来执行其任务.

在OSGi世界中形式化这种关系的最佳方法是什么?一个示例要求就是向用户显示应用程序的当前版本号(而不是捆绑包)这么简单.如何发现这个版本号?

Eclipse有一个名为'features'的概念,但这不是OSGi标准.

Peter Kriens 撰写了关于OSGi应用程序的文章,他的文章很有意义.我对它的看法是应用程序可以映射到一个包; 只是捆绑以某种方式使用其他捆绑包.但是如果要使用Import-Package创建应用程序包,我不会从开发的角度看这是如何可行的.

一种方法可能是使用Require-Bundle并拥有自己的版本的"应用程序包",但在OSGi世界中,Require-Bundle不受欢迎.

但是,使用Import-Package导入具有所需版本的所有必需软件包会给开发人员带来很大的维护开销,以至于我认为它不可行.每次进行最小的更改,甚至是实现包,都必须更新包版本,然后在"应用程序包"中更新对包版本的依赖性.

osgi

10
推荐指数
1
解决办法
1295
查看次数

如何从Scala Iterable获取不同的项目,保持懒惰

我有一个java.lang.Iterable懒洋洋地计算其价值的东西.我从Scala访问它.是否存在仅返回不同值的核心API方式?例如,成像有一个过滤方法,也提供了迄今为止返回的所有结果:

val myLazyDistinctIterable = iterable.filter((previousReturnedItems, newItem) => previousReturnedItems.contains(newItem))
Run Code Online (Sandbox Code Playgroud)

我想这不是一般情况,因为它涉及存储以前返回的项目,这可能就是它不在核心API中的原因.

我知道List.distinctSets但是我想要的东西在被问到之前不会计算它的元素.

collections scala lazy-evaluation

9
推荐指数
2
解决办法
8838
查看次数

如何处理不停止线程的行为不当的库

在处理关闭库时未正确清理线程的第三方库时,有哪些变通方法?

许多库为其中包含的代码显式或隐式地公开生命周期方法.例如,Web应用程序框架存在于servlet容器中的Web应用程序上下文中.创建上下文时,由于各种原因,框架可能会启动某些线程.

现在,进一步举例说明,当关闭servlet容器或Web应用程序上下文时,Web应用程序框架应该终止所有这些线程.应该关闭由库创建的ExecutorService,或者应该制定一些其他方法来停止这些线程.

最糟糕的情况是线程是非守护进程线程.这些实际上会停止Java进程的终止.但即使它们是守护程序线程,允许线程继续也可能是不好的做法.如果(回到示例)servlet容器嵌入在其他代码中,其他代码可能继续运行,线程仍在继续,这可能会导致问题.

没有以编程方式暴露这些线程,所以可以做些什么?

如果您正在使用这样的第三方库,那么强制关闭现有线程的方法有哪些?

java multithreading

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

OSGi单元测试和捆绑导出

平衡捆绑包的声明导出和单元测试要求的最佳方法是什么?

考虑要为其编写单元测试的捆绑"mybundle".捆绑包的源存储在IDE的"项目"概念中.例如:

mybundle
  src/java
    mybundle.package1
      ...java
  bnd.bnd
Run Code Online (Sandbox Code Playgroud)

单元测试我的意思是各个POJO的测试中,不相关的,其中这些类可以在束内使用的更宽的OSGi上下文.在可能的情况下,测试应该可以通过'vanilla'类加载运行,例如Eclipse中的JUnit运行程序.

在开发时,这里有几种打包单元测试的方法:

捆绑源中的单元测试

在这里,单元测试被添加到项目的源文件夹中:

mybundle
  src/java
    mybundle.package1
      ...java
  test/java
    mybundle.package1.test
      ...java
  bnd.bnd
Run Code Online (Sandbox Code Playgroud)

请注意附加的'.test'以区分包并避免拆分包问题.

通常会有一些措施来确保测试类不会在构建的bundle JAR中结束.

在单独的捆绑中进行单元测试

这里添加了一个单独的包,名称后缀为'.test',这是一般约定.

mybundle
  src/java
    mybundle.package1
      ...java
mybundle.test
  test/java
    mybundle.package1.test
      ...java
  bnd.bnd
Run Code Online (Sandbox Code Playgroud)

这样做的问题在于,由于类是分开的,并且单元测试的运行可能不了解OSGi环境(例如,使用Eclipse JUnit运行器),因此必须装饰JUnit运行器的运行时类路径.

片段中的单元测试

(谢谢@HollyCummins).这里创建了一个单独的bundle片段:

mybundle.fragment
  test/java
    mybundle.package1.test
      ...java
  bnd.bnd
Run Code Online (Sandbox Code Playgroud)

该片段将'mybundle'声明为其主机,从而允许它在'mybundle'中共享类,而无需导出包.

这样做的缺点是因为片段加载是OSGi概念,所以需要使用OSGi容器运行或装饰类路径.

出口问题

在考虑bundle如何执行Export-Package时会出现问题.将出口尽可能少的包装视为良好做法.然而,单元测试似乎迫使额外的包出口.

对于第二个选项,这是最明显的,具有单独的测试包.测试包中的测试必须对正在测试的类进行Import-Package,并且测试中的bundle还必须Export-Package所有正在测试的所述类.

因此,显而易见的解决方案是倾向于在捆绑源中进行单元测试,但问题很快就会出现在非平凡的情况下.您可能希望共享测试代码,例如,您可能在单独的捆绑包中进行OSGi集成测试.要共享代码,您最终必须导出 - 打包测试包,然后您最终也会在构建的包中测试代码!

组织OSGi捆绑/项目进行测试的最佳方法是什么?

java junit osgi unit-testing

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

如何使用OSGi片段来提供具有相同文件名的依赖于平台的本机代码?

我正在使用JNotify项目来监听文件系统事件.这取决于每个OS的一个本机库:处理器架构.例如,有一个用于Windows x86的库,一个用于x86-64等的库.

单片捆绑

最初,我有一个包含JNotify Java类和本机代码的包.本机代码在Bundle-NativeCode中声明如下:

(我已经将这些格式化为bnd样式以获得更好的可读性......显然,实际的MANIFEST.MF文件已正确形成).

Bundle-NativeCode: jnotify_64bit.dll;osname=Win32;osname="Windows NT (unknown)";osname = WindowsXP;osname = Windows2000;osname = Windows2003;osname = WindowsVista;osname = Windows7;osname = WindowsServer2008;osname= Windows8;osname = WindowsServer2012;processor = x86-64,\
 jnotify.dll;osname=Win32;osname="Windows NT (unknown)";osname = WindowsXP;osname = Windows2000;osname = Windows2003;osname = WindowsVista;osname = Windows7;osname = WindowsServer2008;osname = Windows8;osname = WindowsServer2012;processor = x86,\
 libjnotify.so;osname = Linux;processor = x86,\
 libjnotify64.so;osname = Linux;processor = x86-64,\
 libjnotify.dylib;osname = Mac OSX;processor = x86;processor = x86-64,\
 *
Run Code Online (Sandbox Code Playgroud)

这很好用.

转移到片段

我认为如果我将库移动到单独的片段包中会很"好",这样我就可以为我感兴趣的体系结构贡献片段.以Linux为例,我将它们分成两个包:

Linux 32位

Include-Resource: lib/libjnotify.so
Bundle-NativeCode: libjnotify.so;osname = Linux;processor …
Run Code Online (Sandbox Code Playgroud)

java osgi native-code osgi-fragment

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

在bndtools中,是什么原因导致生成执行环境的Require-Capability标头?

我有以下的bnd文件:

Bundle-Version: 1.0.12
Bundle-Activator: a.b.Activator
Private-Package: a.b
-buildpath: osgi.core;version=4.3.0,\
    org.apache.felix.bundlerepository;version=1.6.6,\
    osgi.cmpn;version=4.3.0.201111022214
-sources: false
Run Code Online (Sandbox Code Playgroud)

在生成的MANIFEST.MF中:

Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.6))"
Run Code Online (Sandbox Code Playgroud)

我不希望这个......我没有理由看到它应该是.那么我该如何避免呢?

osgi bnd bndtools

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

使用OSGi API,如何确定给定的b​​undle是否是片段?

在OSGi API中,对BundleContext.getBundles()的调用将返回所有包,无论它们是否为片段.对于给定的Bundle对象,判断这是否是片段的最佳方法是什么?

osgi bundle osgi-fragment

5
推荐指数
1
解决办法
1334
查看次数