문제

나는 구축 된 Java 프로젝트가 있습니다 buildr 그리고 그것은 외부 의존성이 있습니다.

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

이 모든 종속성을 포함하는 단일 독립형 JAR 파일을 작성하기를 원합니다.

어떻게해야하나요?

(논리적 후속 질문이 있습니다. 포함되지 않은 모든 코드를 포함 된 종속성에서 어떻게 제거하고 실제로 사용하는 클래스 만 패키지하는 방법?)

도움이 되었습니까?

해결책

이것이 제가 지금하고있는 일입니다. 이것은 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

그리고 나중에 :

package(:jar)
package(:jar).enhance { |pkg| pkg.enhance { |pkg| add_dependencies(pkg) }}

(경고 : 나는 buildr에 대해 거의 알지 못합니다. 이것은 완전히 잘못된 접근법 일 수 있습니다. 그것은 나에게 효과적입니다)

다른 팁

나는 또한 buildr를 배우고 있으며 현재 내 응용 프로그램으로 스칼라 런타임을 포장하고 있습니다.

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

이것이 Autojar보다 열등한 지 알 수 없지만 (의견을 환영합니다) 간단한 예제로 작동하는 것 같습니다. Scala-library.jar 생각을 포장하는 데 4.5 분이 걸립니다.

나는 사용할 것이다 계단식 내 예를 위해 :

cascading_dev_jars = Dir[_("#{ENV["CASCADING_HOME"]}/build/cascading-{core,xml}-*.jar")]
#...
package(:jar).include cascading_dev_jars, :path => "lib"

다음은 Buildr로 Uberjar를 만드는 방법입니다. 항아리에 넣은 내용의 사용자 정의 및 매니페스트가 어떻게 생성되는지.

assembly_dir = 'target/assembly'
main_class = 'com.something.something.Blah'

artifacts = compile.dependencies

artifacts.each do |artifact|
    Unzip.new( _(assembly_dir) => artifact ).extract
end

# remove dirs from assembly that should not be in uberjar
FileUtils.rm_rf( "#{_(assembly_dir)}/example/package" )
FileUtils.rm_rf( "#{_(assembly_dir)}/example/dir" )

# create manifest file
File.open( _("#{assembly_dir}/META-INF/MANIFEST.MF"), 'w') do |f| 
    f.write("Implementation-Title: Uberjar Example\n")
    f.write("Implementation-Version: #{project_version}\n") 
    f.write("Main-Class: #{main_class}\n")
    f.write("Created-By: Buildr\n")                 
end

present_dir = Dir.pwd
Dir.chdir _(assembly_dir)
puts "Creating #{_("target/#{project.name}-#{project.version}.jar")}" 
`jar -cfm #{_("target/#{project.name}-#{project.version}.jar")} #{_(assembly_dir)}/META-INF/MANIFEST.MF .`
Dir.chdir present_dir

버전도 있습니다 봄을 지원합니다, 모든 것을 연결함으로써 Spring.schemas

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top