小编ans*_*elm的帖子

清理Maven依赖管理

在一个大的Maven 2项目中,让依赖关系管理确保在整个系统中只使用一个依赖项版本是很好的.这使得系统保持一致.

但是当我生成有效的POM时,我没有机会看到依赖版本的来源.同样,在层次结构顶部的POM中,我不知道在子POM中确实使用了依赖关系管理部分的定义版本.

那么如何清理依赖关系管理呢?当我删除一个项目中的依赖项时,我总是检查所有其他项目是否仍然需要它,以便我也可以从顶部的依赖项管理中删除?

另外,如何构建依赖关系管理,确保它不会在子POM中的某处复制?当我添加依赖项时,我总是检查所有其他项目,看它是否可能在依赖项管理中聚合在一起?或者你是否总是将所有依赖版本从头开始移动到顶部,这样它们总是只在一个地方?

谢谢你的任何想法.

java dependencies pom.xml maven

11
推荐指数
2
解决办法
9294
查看次数

Maven增量建筑

我们目前有一个大的Maven 2项目,它是许多具有复杂依赖性的单独独立项目的集合,除了一些常见的父POM用于构建.最后,我们总是必须将应用程序作为一个整体发布,所以我宁愿将其转换为一个或几个大项目.

有没有人有如何优化大型项目的持续集成构建的经验.Maven或Hudson的增量构建功能是否有用?在一个模块中只做了一点小改动时,我宁愿不要总是等待2个小时.

另一方面,可以肯定的是,您始终必须重建并重新测试已更改模块的至少所有直接和间接依赖关系.这也是我们目前正在与Hudson一起做的事情,自动触发所有依赖的工作.

为同一个项目分成多个构建作业是否有效?我通常不喜欢在服务器上有所有其他生成的东西,如报告,文档等可能已过时的工件.

谢谢你的任何想法.

java hudson incremental-build maven

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

Clojure表现:REPL与uberjar

我想做一些实时图形渲染,并尝试每帧每像素进行多次计算.然后我很快发现这很慢并且从最基础开始:我可以多快地遍历所有像素?

我发现dotimes的速度相当快,但是当我在REPL中执行此操作时,速度非常慢:

user=> (dotimes [_ 10] (time (dotimes [_ 1e7] (+ 1 1))))
"Elapsed time: 409.177477 msecs"
"Elapsed time: 417.755502 msecs"
"Elapsed time: 418.939182 msecs"
"Elapsed time: 420.131575 msecs"
"Elapsed time: 419.83529 msecs"
"Elapsed time: 417.612003 msecs"
"Elapsed time: 420.749229 msecs"
"Elapsed time: 418.918554 msecs"
"Elapsed time: 414.403957 msecs"
"Elapsed time: 417.729624 msecs"
nil
user=>
Run Code Online (Sandbox Code Playgroud)

然后我把它放到Leiningen项目中.当我做"lein run"时,它同样缓慢.但是当我创建uberjar并使用java命令运行它时,速度要快得多:

% java -jar target/looping-0.1.0-SNAPSHOT-standalone.jar 
"Elapsed time: 122.006758 msecs"
"Elapsed time: 3.667653 msecs"
"Elapsed time: 3.60515 msecs"
"Elapsed time: 4.008436 msecs"
"Elapsed time: 3.961558 …
Run Code Online (Sandbox Code Playgroud)

performance clojure

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

与Maven一起发布

我最近发布了一个maven项目,并且无法停止认为整个过程非常复杂且容易出错.假设我有一个应用程序,它包含3个模块A,B和C,每个模块在subversion中都有自己的文件夹,在Hudson中有一个单独的构建作业.每个模块都有一个父POM,它聚合了多个工件.A依赖于B,B依赖于C.依赖版本在顶级POM D中定义,它是A,B和C的父级.除了确保所有版本都保存在一个地方之外别无其他整个项目中使用的每个工件只有一个版本.为了进行发布,我执行以下操作:

  1. 通过Hudson的发布插件发布顶级POM D.
  2. 从C开始,没有进一步的依赖关系.
  3. 更改C以使用发布插件引用D. Release C的已发布版本.
  4. 在D中输入C的发布版本,因此可以使用C的稳定版本发布依赖于C的模块.
  5. 使用发布插件再次发布D.
  6. 为B做3-5
  7. 为A做3-5

之后,我在A,B和C中拥有所有工件的稳定非快照构建,并且可以将它们组合在一起,形成应用程序的最终稳定版本.

实际上,我不仅有3个,而且还有20个这样的模块.现在我发现这个程序非常复杂,我认为它有很多潜在的问题:

  • 我需要多次释放D,一次为依赖层次结构中的每个级别.最后我有D只有稳定版本的A,B和C.为了继续下一个开发版本,我必须再次编辑D并引用已发布模块的所有新快照版本.通常,即使使用发布插件,依赖管理也必须手动完成.

  • 如果有人在我正在发布时提交它可能会搞砸事情.为了确保我必须检查所有模块的特定修订,构建并测试它,然后为该修订版上的所有模块执行发布.但是,如何确保Hudson和多个工作?

  • 取决于3个不同的系统:Subversion服务器,Hudson服务器和Maven存档服务器.如果只有一个失败,我就不能再释放了.

  • 耗时的.在这个过程中,我发布的每个模块都会反复进行大量的构建,打包,上传,下载,提取等工作.发生了大量与存档的冗余数据交换.但实际上一切都可以在本地完成,因为Hudson拥有它需要的所有源代码.最后一次需要上传最终的包.

  • 假设我松开了存档服务器上的软件包.没有简单的方法可以告诉Hudson检查标记的版本并按正确的顺序重建它们.

为什么这不像一次性检查所有代码,调整一个全局版本,构建和测试它,提交,标记提交以及最终上传二进制文件一样容易?

感谢您的任何想法.

java svn hudson maven maven-release-plugin

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

zsh 并不总是扩展路径

如果我输入rpm --root=/ZSH 然后按 TAB 没有任何反应。这适用于许多其他命令。如何让 ZSH 始终像在 BASH 中一样扩展路径?

shell zsh

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

postgres公共架构的不安全默认值?

问题基本上归结为:如何在postgres上安全地创建新数据库,这意味着默认情况下,没有人对新数据库拥有任何权限,并且必须明确定义所有访问权限.

我尝试了互联网上的各种资源,但无法得到明确的答案.我在fedora 17 linux上使用postgres 9.1尝试了这个,但最终会在redhat 6.3上使用postgres 8.4.

过程:

  1. 安装postgres,运行initdb,启动服务器
  2. 与postgres超级用户本地连接
  3. 使用optionsb和createrole创建新用户u1
  4. 断开并重新连接为u1
  5. 创建数据库db1
  6. 创建用户u2
  7. 断开并重新连接为u2
  8. 在db1中创建表t1

我不希望最后一步成功.u2没有在db1上获得任何权限,并且在查询数据库或模式时也没有显示任何权限.根据我的理解,u2可以在db1上创建表,因为公共模式和内置公共角色的默认权限.如果我想撤销它们,我只能在数据库上这样做,但不能在模式上这样做,因为它是由postgres拥有的.所以最终我必须为我所创建的每个新数据库撤销超级用户的权限.我不能将它委托给数据库的所有者,我也不能忘记为每个新数据库执行此操作.

默认设置将允许每个用户在任何新数据库中垃圾邮件公共模式.这是危险的,因为其他用户可能默认处理公共模式而不检查表是否已存在,只使用某些陌生人拥有的现有表.

我怎样才能修复这些不安全的默认值?

security postgresql

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

调用go工具的编程方式

有没有办法go build通过库调用从另一个 Go 程序中以编程方式调用 Go 工具(如 ),并获得与命令行调用的文本输出相比更结构化的输出?

go go-toolchain

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

没有(远程)存储库的Maven?

我有一个Maven 2多模块项目,并希望确保所有内容都来自我当地的签出源.

  • 是否有可能告诉Maven永远不会为它拥有的模块下载任何东西?我是否必须禁用远程存储库?
  • Maven是否总是必须采用昂贵的方式将模块安装到本地存储库中,然后再为每个依赖项提取它?
  • 如果模块的本地源发生了变化,Maven是否会自动首先重新编译模块的依赖项,然后编译依赖项?

repository maven multi-module

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

我是否必须释放使用 Cgo 创建的结构?

我在 Go 代码中创建 C 结构体,如下所示:

var data C.MyStruct_t
Run Code Online (Sandbox Code Playgroud)

我是否必须在某个时候手动释放它们,就像使用 CString 时所做的那样?使用 CString 我经常做这样的事情:

ctitle := C.String(title)
defer C.free(unsafe.Pointer(&ctitle))
C.my_func(&ctitle)
Run Code Online (Sandbox Code Playgroud)

go cgo

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