Pergunta

Existe uma ferramenta ou script que facilmente se funde um monte de JAR arquivos em um arquivo JAR?Um bônus seria facilmente definir o principal-o manifesto de arquivo e torná-lo executável.

O caso concreto é um Java reestruturado ferramenta de texto.Eu gostaria de executar algo como:

java -jar rst.jar

Tanto quanto eu posso dizer, ele não tem dependências que indica que ele não deve ser fácil única ferramenta de arquivo, mas o arquivo ZIP baixado contém um monte de bibliotecas.

      0  11-30-07 10:01   jrst-0.8.1/
    922  11-30-07 09:53   jrst-0.8.1/jrst.bat
    898  11-30-07 09:53   jrst-0.8.1/jrst.sh
   2675  11-30-07 09:42   jrst-0.8.1/readmeEN.txt
 108821  11-30-07 09:59   jrst-0.8.1/jrst-0.8.1.jar
   2675  11-30-07 09:42   jrst-0.8.1/readme.txt
      0  11-30-07 10:01   jrst-0.8.1/lib/
  81508  11-30-07 09:49   jrst-0.8.1/lib/batik-util-1.6-1.jar
2450757  11-30-07 09:49   jrst-0.8.1/lib/icu4j-2.6.1.jar
 559366  11-30-07 09:49   jrst-0.8.1/lib/commons-collections-3.1.jar
  83613  11-30-07 09:49   jrst-0.8.1/lib/commons-io-1.3.1.jar
 207723  11-30-07 09:49   jrst-0.8.1/lib/commons-lang-2.1.jar
  52915  11-30-07 09:49   jrst-0.8.1/lib/commons-logging-1.1.jar
 260172  11-30-07 09:49   jrst-0.8.1/lib/commons-primitives-1.0.jar
 313898  11-30-07 09:49   jrst-0.8.1/lib/dom4j-1.6.1.jar
1994150  11-30-07 09:49   jrst-0.8.1/lib/fop-0.93-jdk15.jar
  55147  11-30-07 09:49   jrst-0.8.1/lib/activation-1.0.2.jar
 355030  11-30-07 09:49   jrst-0.8.1/lib/mail-1.3.3.jar
  77977  11-30-07 09:49   jrst-0.8.1/lib/servlet-api-2.3.jar
 226915  11-30-07 09:49   jrst-0.8.1/lib/jaxen-1.1.1.jar
 153253  11-30-07 09:49   jrst-0.8.1/lib/jdom-1.0.jar
  50789  11-30-07 09:49   jrst-0.8.1/lib/jewelcli-0.41.jar
 324952  11-30-07 09:49   jrst-0.8.1/lib/looks-1.2.2.jar
 121070  11-30-07 09:49   jrst-0.8.1/lib/junit-3.8.1.jar
 358085  11-30-07 09:49   jrst-0.8.1/lib/log4j-1.2.12.jar
  72150  11-30-07 09:49   jrst-0.8.1/lib/logkit-1.0.1.jar
 342897  11-30-07 09:49   jrst-0.8.1/lib/lutinwidget-0.9.jar
2160934  11-30-07 09:49   jrst-0.8.1/lib/docbook-xsl-nwalsh-1.71.1.jar
 301249  11-30-07 09:49   jrst-0.8.1/lib/xmlgraphics-commons-1.1.jar
  68610  11-30-07 09:49   jrst-0.8.1/lib/sdoc-0.5.0-beta.jar
3149655  11-30-07 09:49   jrst-0.8.1/lib/xalan-2.6.0.jar
1010675  11-30-07 09:49   jrst-0.8.1/lib/xercesImpl-2.6.2.jar
 194205  11-30-07 09:49   jrst-0.8.1/lib/xml-apis-1.3.02.jar
  78440  11-30-07 09:49   jrst-0.8.1/lib/xmlParserAPIs-2.0.2.jar
  86249  11-30-07 09:49   jrst-0.8.1/lib/xmlunit-1.1.jar
 108874  11-30-07 09:49   jrst-0.8.1/lib/xom-1.0.jar
  63966  11-30-07 09:49   jrst-0.8.1/lib/avalon-framework-4.1.3.jar
 138228  11-30-07 09:49   jrst-0.8.1/lib/batik-gui-util-1.6-1.jar
 216394  11-30-07 09:49   jrst-0.8.1/lib/l2fprod-common-0.1.jar
 121689  11-30-07 09:49   jrst-0.8.1/lib/lutinutil-0.26.jar
  76687  11-30-07 09:49   jrst-0.8.1/lib/batik-ext-1.6-1.jar
 124724  11-30-07 09:49   jrst-0.8.1/lib/xmlParserAPIs-2.6.2.jar

Como você pode ver, é algo desejável para não precisar fazer isso manualmente.

Até agora eu só tentei AutoJar e ProGuard, ambos os quais foram bastante fácil de fazer funcionar.Parece que há algum problema com o constante piscina em arquivos JAR.

Aparentemente, jrst é ligeiramente quebrado, então eu vou fazer de corrigi-lo.O Maven pom.xml o arquivo foi aparentemente quebrado demais, então eu vou ter para corrigir isso, antes de fixar jrst ...Eu me sinto como um erro de imã :-)


Atualização:Eu nunca tenho tempo para corrigir este aplicativo, mas eu verifiquei Eclipse's "Runnable JAR assistente de exportação", que é baseado em uma fat JAR.Eu achei isso muito fácil de usar para implementar o meu próprio código.

Algumas outras sugestões excelentes poderia ser melhor para compilações em um não-Eclipse ambiente, oss, provavelmente, deve fazer uma boa build usando Formiga.(Maven, até agora só tem me dado dor, mas outros a amá-lo.)

Foi útil?

Solução

Eclipse 3.4 JDT do Runnable JAR assistente de exportação.

No Eclipse 3.5, este foi estendido.Agora você pode escolher como você quer tratar o seu referenciados arquivos JAR.

Outras dicas

Da formiga zipfileset faz o trabalho

<jar id="files" jarfile="all.jar">
    <zipfileset src="first.jar" includes="**/*.java **/*.class"/>
    <zipfileset src="second.jar" includes="**/*.java **/*.class"/>
</jar>

Depois de ter tentado algumas soluções diferentes, eu encontrei Um JAR o mais fácil para se trabalhar, e conseguiram fazer exatamente isso:produzir um único executável JAR que contém tudo que eu preciso.

Um FRASCO usa uma classe personalizada-carregador que pode navegar recursos aninhados.Olhar para o .arquivo bat no download, parece org.codelutin.jrst.JRST no jrst-0.8.1.jar é a classe principal, para que o seu manifesto deve olhar como este:

Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: org.codelutin.jrst.JRST

O que é realmente legal é que Um JAR vai lidar passando argumentos de linha de comando para você.O classpath é manipulada pela classe personalizada carregador, supondo que todos os recursos de que você precisa estão reunidas em único FRASCO.

A maneira mais fácil usar Um JAR é com ant;há um costume "de um frasco de" formiga tarefa que funciona da seguinte forma (assumindo que o seu manifesto é chamado de "primeiro.mf"):

<target name="jar-rst">
    <one-jar destfile="rst.jar" manifest="rst.mf">
        <main jar="jrst-0.8.1.jar" />
        <lib>
            <fileset dir="${pathToJars}">
                <include name="batik-util-1.6-1.jar" />
                <include name="icu4j-2.6.1.jar" />
                <include name="commons-collections-3.1.jar" />
                <!-- Snip -->
            </fileset>
        </lib>
    </one-jar>
</target>

Se você é um Maven usuário, normalmente o assembly plugin de fazer o que você quer, ou, potencialmente, a sombra do plugin, e, em alguns casos, uma combinação.

Com o assembly plugin você colocar um arquivo de manifesto em seu projeto com todas as configurações necessárias, embora os padrões são, geralmente, muito bom.Edifício, em seguida, é feito com

mvn assembly:assembly

Ou se você tem mais coisas especiais para lidar com um dos outros objectivos.Todos os arquivos JAR para incluir, são captadas pelo Maven do resolvedor de dependência.Se você usar a sombra do plugin, ele é normalmente a parte de instalar o objetivo, e em um determinado projeto que eu estou fazendo agora o que eu faço

mvn install
mvn assembly:single

O assembly:single objetivo é trabalhar em torno de problemas de vida que, neste caso, uma Primavera aplicação.

Você pode usar JarJar que irá utilizar pacote de sombreamento para se certificar de que o arquivo JAR não entrem em conflito com outros.

ProGuard que não apenas pack seus arquivos JAR em um, mas ele também pode otimizar, de limpeza ou ofuscar os arquivos de classe, fazendo com que a resultante arquivo JAR muito menor do que a soma de todos os arquivos JAR antes.

Eu realmente tentei ProGuard com o JRST ferramenta, e esta é, como você relatou.Eu tentei controlar o problema e achei que se relacionam com um bug no ICU4J biblioteca referenciada pela jrst.O problema é, que o utilizou UTI versão é muito desatualizado agora.Então troquei o icu.jar arquivo com ICU4J versão 3.2.Agora ProGuard encontra um monte de outros erros/avisos sobre incosistencies com as bibliotecas de JRST.

Meu palpite é que ProGuard funciona como o esperado, mas as bibliotecas de jrst são apenas, não é consistente.Eu não sei se você pode fazer muito mais do que falar com seus desenvolvedores, pois eles devem verificar e atualizar as dependências do projeto.

(baseado em Andrian s):

<jar id="files" jarfile="all.jar">
  <zipgroupfileset dir="${library.dir}" includes="*.jar" excludes="test-helper.jar"/>
  <zipfileset src="first.jar" includes="**/*.java **/*.class"/>
  <zipfileset src="second.jar" includes="**/*.java **/*.class"/>
  <fileset dir=".">
    <include name="LICENSE"/>
    <include name="NOTICE"/>
  </fileset>
</jar>

Um FRASCO de 0,97 acaba de ser lançado no http://one-jar.sourceforge.net, e ele foi estendido com suporte para quadros como Primavera e Guice, que podem apresentar problemas para outras abordagens.Ele também lida com carregador de classe-inversão-em que alguns arquivos JAR são externos a Um FRASCO (por exemplo, JDBC drivers que não pode ser fornecido em pacote).

Um FRASCO é de linha de comando, com Formiga e Maven 2 plugins.É também simples de construir, usando apenas o "jar" ferramenta.

Recomendo também o Eclipse Jar Exportador (Runnable) em que a Conferência Hechler escreveu:ele fez um ótimo trabalho na vinda acima com uma abordagem simples para a moldagem de um conjunto de arquivos JAR.Ele e eu trabalhamos em Um FRASCO, mas a Jarra Exportador é baseada numa base de código.

Há uma ferramenta chamada autojar o que fará a varredura de seu bytecode e compilar um .o arquivo jar com as classes que encontra, incluindo referenciado (importado) classes.

Não funciona sempre com algo como a Primavera, embora, onde você especificar o nome de suas classes na configuração e é carregado pelo framework.

Ou usando o Maven assembly plugin (mvn montagem:montagem)

Eu acho que a ferramenta que você precisa aqui é JarSplice: http://ninjacave.com/jarsplice

Ele faz não exigem Ant ou Maven, tem a sua própria interface de usuário, ele é simples de usar, e fazer exatamente o que você perguntou --> Ele Mescla o conteúdo de vários arquivos jar em um único (por favor, note que ainda precisa para adicionar o seu próprio carregador de classe).

Você deve usar o maven sombreamento plugin para fazer isso.Eu sempre uso o maven para construir autônomo arquivo jar e é tão poderoso

Veja mais:

http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html

Soa como O Apache Ant é o que você está procurando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top