buildr:将依赖包封装到一个jar中

lev*_*lex 9 java maven-2 packaging jar buildr

我有一个使用buildr构建的java项目,它有一些外部依赖项:

repositories.remote << "http://www.ibiblio.org/maven2"
repositories.remote << "http://packages.example/"

define "myproject" do
  compile.options.target = '1.5'
  project.version = "1.0.0"
  compile.with 'dependency:dependency-xy:jar:1.2.3'
  compile.with 'dependency2:dependency2:jar:4.5.6'

  package(:jar)
end
Run Code Online (Sandbox Code Playgroud)

我希望这个构建一个包含所有这些依赖项的独立jar文件.

我怎么做?

(这是一个逻辑上的后续问题:如何从包含的依赖项中删除所有未使用的代码,只打包我实际使用的类?)

lev*_*lex 8

这就是我现在正在做的事情.这使用autojar只提取必要的依赖项:

def add_dependencies(pkg)
  tempfile = pkg.to_s.sub(/.jar$/, "-without-dependencies.jar")
  mv pkg.to_s, tempfile

  dependencies = compile.dependencies.map { |d| "-c #{d}"}.join(" ")
  sh "java -jar tools/autojar.jar -baev -o #{pkg} #{dependencies} #{tempfile}"
end
Run Code Online (Sandbox Code Playgroud)

然后:

package(:jar)
package(:jar).enhance { |pkg| pkg.enhance { |pkg| add_dependencies(pkg) }}
Run Code Online (Sandbox Code Playgroud)

(警告:我对buildr知之甚少,这可能是完全错误的方法.但它对我有用)


use*_*735 7

我也在学习Buildr,目前我用这种方式用我的应用程序打包Scala运行时:

package(:jar).with(:manifest => _('src/MANIFEST.MF')).exclude('.scala-deps')
  .merge('/var/local/scala/lib/scala-library.jar')
Run Code Online (Sandbox Code Playgroud)

不知道这是否不如autojar(欢迎评论),但似乎只是一个简单的例子.需要4.5分钟才能打包scala-library.jar.

  • 这是正确的答案,因为它使用构建函数构建 (2认同)