小编Gru*_*eck的帖子

Java中注释处理的缺点?

我正在考虑启动一个项目,用于使用注释在Java中生成代码(我不会详细说明,因为它不是真正相关).我想知道该项目的有效性和实用性,令我印象深刻的是对Annontation Processor Tool(apt)的依赖.

我想知道的是,我不能从经验中说出,在Java中使用注释处理的缺点是什么?

这些可能是任何东西,包括:

  • 在编写处理器时很难做TDD
  • 很难在构建系统中包含处理
  • 处理需要很长时间,而且很难让它快速运行
  • 在IDE中使用注释需要为每个注释添加一个插件,以便在报告错误时使其行为相同

这些只是例子,不是我的意见.我正在研究是否有任何这些是真的(包括问这个问题;-))

我确信一定有缺点(例如,Qi4J特别列出不使用预处理器作为优势)但我没有经验用它来告诉它们是什么.

使用注释处理的合理替代方法可能是为相关IDE创建插件以生成代码(它将类似于覆盖/实现方法功能,可生成没有方法体的所有签名).但是,每次代码的相关部分发生变化时,都必须重复该步骤,据我所知,注释处理不会.

关于注释侵入量给出的示例,我不认为使用需要类似的东西,对于任何给定的类可能是少数.这当然不会阻止它被滥用.

java

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

推荐的异常检测技术用于简单的一维场景?

我有一个场景,我有几千个数据实例.数据本身表示为单个整数值.我希望能够检测出一个实例是一个极端的异常值.

例如,使用以下示例数据:

a = 10
b = 14
c = 25
d = 467
e = 12
Run Code Online (Sandbox Code Playgroud)

d 显然是异常,我想基于此执行特定的操作.

我很想尝试使用我对特定领域的知识来检测异常.例如,找出与有用的平均值的距离,并根据启发式检查该值.但是,我认为如果我研究更一般的,强大的异常检测技术可能会更好,这些技术背后有一些理论.

由于我的数学知识有限,我希望找到一种简单的技术,例如使用标准偏差.希望数据的单一尺寸性质会使这成为一个常见问题,但如果需要更多信息,请发表评论,我会提供更多信息.


编辑:以为我会添加有关数据的更多信息以及我尝试过的内容,以防它使一个答案比另一个更正确.

这些值都是正数且非零.我希望这些值会形成正态分布.这种期望是基于域的直觉而不是通过分析,如果这不是一件坏事,请告诉我.在聚类方面,除非还有标准算法来选择k值,否则我会发现很难将这个值提供给k-Means算法.

我想对异常/异常采取的行动是将它呈现给用户,并建议基本上从数据集中删除数据点(我不会了解他们将如何做到这一点,但它是有道理的对于我的域名),因此它不会被用作另一个函数的输入.

到目前为止,我已经尝试了三西格玛,并且我的有限数据集上的IQR异常值测试.IQR标记的值不够极端,三西格玛指出的实例更符合我对域的直觉.


有关此特定方案的算法,技术或资源链接的信息是有效且受欢迎的答案.

对于简单的一维数据,推荐的异常检测技术是什么?

classification machine-learning

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

是否有Java实用程序将转换String路径以使用正确的文件分隔符char?

我开发了许多用Java操作文件的类.我正在使用Linux机器,并且一直在幸福地打字new File("path/to/some/file");.当提交时,我意识到该项目的其他一些开发人员正在使用Windows.我现在想调用一个方法,该方法可以接受表单的字符串,"/path/to/some/file"并根据操作系统返回正确分隔的路径.

例如:
"path/to/some/file"成为"path\\to\\some\\file"Windows.
在Linux上它只返回给定的String.

我意识到不会花很长时间来敲定一个可以做到这一点的正则表达式,但我不打算重新发明轮子,并且更喜欢经过适当测试的解决方案.如果它是内置于JDK中会很好,但如果它是一些小型F/OSS库的一部分也很好.

那么是否有一个Java实用程序将转换String路径以使用正确的文件分隔符char?

java string file-io cross-platform jdk1.6

22
推荐指数
3
解决办法
5万
查看次数

删除所有文件,但将所有目录保存在bash脚本中?

我正在尝试做一些可能非常简单的事情,我有一个目录结构,例如:

dir/
    subdir1/
    subdir2/
        file1
        file2
        subsubdir1/
            file3
Run Code Online (Sandbox Code Playgroud)

我想在bash脚本中运行一个命令,它将从dir中递归删除所有文件,但保留所有目录.即:

dir/
    subdir1/
    subdir2/
        subsubdir1
Run Code Online (Sandbox Code Playgroud)

什么是合适的命令?

bash shell

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

如何获得运行时访问正在运行的Clojure应用程序的版本号?

我有一个用Clojure编写的Web服务,该服务不断交付.为了使我们的自动部署工具能够知道已部署了哪个版本的代码库,Web服务应该提供一种方法来查询它是哪个版本.该版本被声明为Leiningen构建工具中项目设置的一部分,如下所示:

(defproject my-web-service "1.2-SNAPSHOT"
  ; ... rest of project.clj
  )
Run Code Online (Sandbox Code Playgroud)

代码库打包为JAR文件.

我们的开发人员不希望在每次提交时增加版本号.相反,我们希望只要在我们的持续集成服务器(在本例中为Jenkins)上触发新构建,它就会自动递增.例如,当版本控制签入提示此代码库的第四十二个版本时,版本是1.2.42.

对于任何已构建和部署的特定JAR,我希望允许以某种方式查询版本号(例如,使用HTTP请求,但这是一个实现细节).响应应包括字符串1.2.42.

如何使正在运行的应用程序可以使用该版本号?

(可能重复,但不包括Jenkins方面:在应用程序中嵌入来自leiningen项目的版本字符串)

continuous-integration clojure leiningen continuous-deployment jenkins

16
推荐指数
1
解决办法
2559
查看次数

如何使用Maven创建一个JarJar'd工件,其中工件的使用不会提取传递依赖?

我目前有一个Java测试库,它是用Maven构建的,并以jar形式发布.我的项目依赖于一个非常常见的库(Objectweb ASM),并且我遇到过类似路径中已经存在早期且不兼容的ASM版本的问题.因此,我开始使用jarjar-maven-plugin来创建jar,在内部重新打包ASM,它不会与另一个版本的ASM冲突.

这执行得很好,我的库可以作为依赖项拉入,没有问题.

但是,因为我的项目在ASM上具有编译范围依赖性,所以每当客户端项目添加我的库时,传递依赖关系也都被拉入.因此,假设,如果他们使用特定版本的ASM,并且他们还将我依赖的版本添加到类路径中,则它们具有未定义的行为.我想避免这种情况,并允许客户端依赖JarJar'd工件,而不会让Maven不必要地和可能危险地降低传递依赖性.

如何创建一个JarJar'd工件,用户可以依赖它而不会提取传递依赖关系?

software-distribution classpath artifact jarjar maven

11
推荐指数
1
解决办法
3608
查看次数

如何配置Eclipse格式化程序不在字段声明之间插入空行?

我正在使用Eclipse 3.5.1(Galileo),并且在使用其中一个自动格式设置时遇到问题.

在我自动格式化空白行的那一刻,在每个字段声明之间插入.我正在寻找的行为是组织字段声明,之间没有空行.除了在声明之间已经存在一个或多个空行的情况之外,在这种情况下,我希望格式化程序遵守空格,并将> = 1行减少到1行.

我知道这在Eclipse的某些时候是可能的(不记得版本,但我已经使用了一个设置),但我似乎找不到正确的设置Window->Preferences->Java->Code Style->Formatter.

我配置哪个设置来启用此行为?


编辑:似乎我所描述的行为是默认的,由于某种原因,我找不到一种方法来返回到没有删除.settings目录.它也无法复制,这表明它与项目设置有些奇怪(它是从开源项目中检出的).虽然我找到了解决这个问题的黑客方法,但我仍然在寻找建议,并且能够验证并接受答案.

eclipse formatting configuration

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

如何从Play中删除所有默认解析器!应用?

背景:我们公司有几个Play!应用程序,它们的测试在我们的内部CI中运行.每个Play应用程序都通过http检索各种公共存储库的依赖关系.这不是理想的(它绕过我们的内部Nexus存储库)但可以忍受.现在我们正在添加额外的CI容量,并且不希望允许新计算机能够访问防火墙外部.

在示例Play应用程序中,以下配置project/Build.scala不足以阻止构建进入repo.typesafe.comrepo1.maven.org:

sbtResolver := "Typesafe (proxy)" at "http://repo-1/nexus/content/repositories/typesafe-releases/"

resolvers := Seq(
  "Maven Central (proxy)" at "http://repo-1/nexus/content/repositories/central/",
  "Typesafe (proxy)" at "http://repo-1/nexus/content/repositories/typesafe-releases/",
  // some more internal Nexus repositories
)

externalResolvers := Seq.empty
Run Code Online (Sandbox Code Playgroud)

(repo-1是我们的内部Nexus主机,代理Maven Central,Typesafe和其他存储库)

当我无论是从中央Maven的(如番石榴)或从类型安全的存储库(如播放邮件插件)中删除一些依赖,并运行play compile,我从仍被从检索到的依赖性输出看到的repo.typesafe.comrepo1.maven.org:

[info] downloading http://repo.typesafe.com/typesafe/releases/com/typesafe/play-plugins-mailer_2.9.1/2.0.2/play-plugins-mailer_2.9.1-2.0.2.jar ...
[info]  [SUCCESSFUL ] com.typesafe#play-plugins-mailer_2.9.1;2.0.2!play-plugins-mailer_2.9.1.jar (981ms)
[info] downloading http://repo1.maven.org/maven2/com/google/guava/guava/12.0/guava-12.0.jar ...
[info]  [SUCCESSFUL ] com.google.guava#guava;12.0!guava.jar (1422ms)
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我们还提供了一些稍微旧版本的东西:Scala 2.9.1,Play 2.0.1,sbt 0.11.3.


如何强制Play应用程序专门从内部存储库中检索依赖项?

sbt playframework maven-central typesafe-stack typesafe

10
推荐指数
2
解决办法
2451
查看次数

使用JUnit 4的预期异常机制导致意外行为的原因?

我试图测试一个特定的方法从方法抛出预期的异常.根据JUnit4文档和这个答案,我把测试编写为:

@Test(expected=CannotUndoException.class)  
public void testUndoThrowsCannotUndoException() {   
    // code to initialise 'command'

    command.undo();
}
Run Code Online (Sandbox Code Playgroud)

但是,此代码未通过JUnit测试,将抛出(和预期)异常报告为错误.

我正在测试的方法在体内只有这个:

public void undo() {
    throw new CannotUndoException();
}
Run Code Online (Sandbox Code Playgroud)

此外,以下测试通过:

public void testUndoThrowsCannotUndoException() {
    // code to initialise 'command'

    try { 
        command.undo();
        fail();
    } catch (CannotUndoException cue){

    }
}
Run Code Online (Sandbox Code Playgroud)

意味着实际抛出了预期的异常.

我实际上计划将方法更改为实际执行某些操作,而不是仅仅抛出异常,但是让我对导致问题的原因感到好奇,以免将来再次发生.

已进行以下检查:

  • 导入到测试用例中的CannotUndoException是正确的
  • JUnit的第4版是我的类路径中唯一的一个
  • 干净并构建Eclipse工作区并未改变结果

我正在使用JUnit 4.1,并且在同一测试中我正在使用Mockito.

什么可能导致错误的失败?

java unit-testing exception junit4

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

Lucene可以从单个索引文件中返回多个搜索结果吗?

我正在使用Lucene索引和搜索少量大型文档.使用Lucene网站上的演示,我已经将文档编入索引并能够搜索它们.但是,搜索结果不是特别有用,因为它指向文档的文件.对于非常大的文档,这不是特别有用.

我想知道Lucene是否可以索引这些非常大的文档并对它们进行抽象,从而提供更细粒度的结果.

一个例子可能更好地解释我的意思.考虑一本非常大的书,比如圣经.一个文件包含整本圣经文本,所以在演示中,搜索结果说"大马士革"会指向该文件.我想要做的是保留大文档,但搜索会返回指向书籍,章节或甚至与诗歌一样精确的结果.所以搜索"大马士革"可能会回归(第17章,第7章,第8节).

这是否可行(以及Lucene使用中的最佳实践),还是应该尝试将大文档分成许多小文件来索引?

如果它有所不同,我正在使用Java Lucene 2.9.0并且正在为大约1MB到4MB的HTML文件编制索引.在文件大小方面并不大,但相对于阅读它的人而言,它很大.


我不认为我已经尽可能地解释了这一点.这是另一个例子.

假设我使用我的大型HTML文件,并且(为了论证)搜索词"大马士革"出现3次.一旦在<div>标签内的第100行,在标签内的第2000 <p>行上,在<h1>标签内的第5000行上.是否可以使用Lucene进行索引,这样就会有3个结果,并且它们可以指向该术语所在的特定元素?

我认为我不想为该术语提供不同的文档结果.因此,如果"大马士革"一词在特定内容中出现两次<div>,则只会有一次匹配.

Kragen的评论中可以看出,当Lucene经历索引阶段时,我想要做的就是解析HTML.然后我可以根据解析器读入的内容来决定我想要考虑的块作为一个文档.因此,如果我看到具有某个类的div,我可以开始一个新的Lucene文档,当搜索div内容中的单词时,它将作为单独的命中返回.

这听起来像我想做的,是否可能?

html java lucene indexing

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