Maneira mais fácil para mesclar um lançamento em um arquivo JAR
-
09-06-2019 - |
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.)
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.
Há 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.