aus mehreren jar files, ein großes basteln

Status
Nicht offen für weitere Antworten.

vodn7v

Bekanntes Mitglied
Hallo,
ich habe mehrere jar files und möchte diese zu einem großen jar file zusammenfügen.
ist sowas überhaupt möglich?
wenn ja nach welchem stichwort muss ich da zuerst suchen ??

vielen dank !!
 
Mit dem Eclipse-Plugin FatJAR geht das. Du solltest dir aber die Frage stellen, ob das

a) rechtlich möglich
b) sinnvoll ist
 
danke, das hört sich schonmal gut an. soweit ich gelesen habe kann man damit ein ganzes projekt als jar verpacken und es starten.
ich möchte aber lediglch 30 einzelne jar dateien zu einer großen jar datei zusammenführen, die dann in mein projekt integriert werden kann.

ist das damit auch möglich ??

danke !!
 
Klar, alle .class entpacken und alle zusammen in ein jar wieder verpacken. Kannst du höchstens Probleme mit dem manifest.mf bekommen.

Aber die große Frage dabei ist, ob das mit den von dir benutzten Libraries lizenzrechtlich aussieht.
 
30 jars in eine jar packen um sie ins Projekt zu "integrieren"?
Da müsste man sich schon sehr genau überlegen ob das wirklich sinnvoll ist.
 
lizensrechtlich ist das, denke ich kein problem. ich möchte es ja nur übersichtlich halten. die ganzen jar dateien die ich fuer mein framework benötige sind lizenstechnisch unter lgpl oder gpl und ich möchte es einfach etwas übersichtlicher haben =)
und aus ca 30 jar dateien die klassen rauszuholen um mir daraus wieder eine einzelne jar datei zu basteln, ist mir ein bischen viel aufwand. ich dachte das es irgednwie einfacher geht.

alle jars makieren, rechtsklickt --> jars zusammenführen ^^

aber so einfach geht das wohl nicht oder? =)

danke !!
 
Du veröffentlichst Deine Software selbst unter GPL? Dann ist das neu zusammenpacken von LGPL und GPL-Bibliotheken kein Problem, sofern Du alle Lizenzen ausweist und den Quelltext entsprechend verfügbar machst.

BTW: Das Zusammenpacken ist ja nicht aufwendig:
Code:
#! /bin/bash

# standard test whether selfdir exists
case "$0" in
  /*) self=$0 ;;
   *) self="$(pwd)/$0" ;;
esac

set -e

selfdir="$( (cd "${self%/?*}" && pwd) )"
[ "${selfdir}" ] || exit 1

# first argument is target JAR file
if [ $# -ne 1 ] ; then
  echo 2>&1 "Usage: "
  echo 2>&1 "$0 TargetJarFile"
  exit -2
fi

# create tmp dir
test -d "${TMPDIR}" || (echo 2>&1 "Temp dir '${TMPDIR}' does not exist" ; exit -1)
tmp="${TMPDIR}/jarbundle,$(date '+%Y%m%d%H%M%S')"

# unpack all *.jar
(
  mkdir "${tmp}"
  indir="$(pwd)"
  cd "${tmp}"
  for f in "${indir}/"*.jar ; do
    jar -xf "$f"
  done
)

# pack all unpacked files
jar -cf "$1" -C "${tmp}" .
jar -i "$1"

# remove tmp dir
rm -rf "${tmp}"

Ebenius
 
Du veröffentlichst Deine Software selbst unter GPL? Dann ist das neu zusammenpacken von LGPL und GPL-Bibliotheken kein Problem, sofern Du alle Lizenzen ausweist und den Quelltext entsprechend verfügbar machst.

das Programm muss erst wieder unter die GPL gestellt werden, sobald es distributed wird, für den "privaten" Gebrauch (keine Weitergabe) "entfallen" also die Bedingungen der Herausgabe:
Frequently Asked Questions about the GNU Licenses - GNU Project - Free Software Foundation (FSF)
 
Wahlweise zur bash Variante von Ebenius hier das ganze mithilfe von Groovy & Ant (Dementsprechend kann man das ganze auch nur mithilfe von Ant regeln, die Tasks dafür sind: (mkdir, unjar (mit innerem fileset), jar, delete)

[HIGHLIGHT="Java"]// source directory
def myDir = "/home/mvitz/test"
def myFile = "neuesJar.jar"
// Creating temp file
def tmpDir = "$myDir/temp"
def ant = new AntBuilder()
ant.mkdir(dir:tmpDir)
// Unjar each jar file
ant.unjar(dest:tmpDir) {
fileset(dir:myDir) {
include(name:"*.jar")
}
}
// Create new jar file
ant.jar(basedir:tmpDir, destfile:"$myDir/$myFile")
// Remove temp directory
ant.delete(dir:tmpDir)[/HIGHLIGHT]
 
Als Anmerkung: In kürze wird so ein 'fat jar' mit Eclipse möglich sein oder das rechtlich in der Grauzone befindliche FatJar Plugin.
Der Eclipse Jar Export Wizard wird vermutlich ab 3.5 die Option anbieten ein single jar zu erzeugen und installiert dann einen custom ClassLoader der jar in jar versteht.
 
@Wildcard

klingt interessant (ob das jetzt positiv oder negativ ist, sei mal dahingestellt). Woher hast du die Info? Oder ist das für euch Eclipse-Programmierer wieder was internes 😉 ?
 
klingt interessant (ob das jetzt positiv oder negativ ist, sei mal dahingestellt). Woher hast du die Info? Oder ist das für euch Eclipse-Programmierer wieder was internes 😉 ?
https://bugs.eclipse.org/bugs/show_bug.cgi?id=219530

Wieso isn das Plugin in einer rechtlichen grauen Zone?!
Es stellt sich die Frage in wie weit du etwas as-is auslieferst, wenn du es auspackst und neu zusammen packst. Je nach Lizenz kann das problematisch sein bzgw. an besondere Auflagen gekoppelt sein
 
Nunja, dafür kann das Plugin nix!
Das ist das gleiche als wenn man sagen würde, DVD-Brenner sind in der grauen Zone!
Man kann damit DVD Raubkopien erstellen, aber auch seine Bilder brennen...

Liegt halt am Anwender, sich vorher die Lizenz anzugucken 🙂
 
Ja, sorry, das war inkorrekt ausgedrückt. Natürlich nicht das Plugin selbst, sondern dessen Verwendung kann rechtlich problematisch sein.
 
@all: erstmal vielen dank fuer die ganzen antworten !! =)

@The_S: ich habe das mit dem FatJar ausprobiert und versucht die Jar mit hilfe des Tutorials zu erstellen. Leider bekomme ich ab einem bestimmten punkt immer eine Fehlermeldung.

Projekt demolib erstellt --> rechtsklick auf das projekt --> Build Fat Jar

Dann bekomme ich immer diese "Fehler-" Meldung: Information: The chosen operation is currently not available.


Kennt das jemant??

Ansonsten versuche ich jetzt erstmal die variante aus der Faq.

Danke euch !!
 
@The_S: ich habe das mit dem FatJar ausprobiert und versucht die Jar mit hilfe des Tutorials zu erstellen. Leider bekomme ich ab einem bestimmten punkt immer eine Fehlermeldung.

Sorry, ich halte von der Jars-ineinander-reinpackerei nichts und habe deshalb auch keinerlei Erfahrung mit FatJAR - ich weiß lediglich, dass es existiert. Sorry!
 
Tjo, ich mach das meistens so, wenn ich keine IDE zur Hand habe 😉

Da ich bald auf Eclipse umsteigen werde (bzw, muss) mache ich vielleicht da ein Plugin 🙂
 
puh. ich nochmal.. also irgednwie funktioniert es doch nicht. habe es mit 2 jars versucht. aber es geht nicht bei allen.

habe mir eine batch datei geschrieben, die das handelt.

bei manchen entpackten jars bekomme ich beim kopieren in die große jar folgende fehlermeldung:

z.B. org/mylin/xml/XsdDOMValidator.class <ein = 5343> <aus 2543> <Komprimiert 52%> ....

Fehlermeldung:

Code:
java.lang.ClassCastException: java.io.File
	at sun.tools.jar.Main.update(Main.java:434)
	at sun.tools.jar.Main.run(Main.java:166)
	at sun.tools.jar.Main.main(Main.java:903)

das habe ich bei manchen jar files.. nicht allen.

ist dir sowas bekannt ?

danke!


EDIT:

sehr merkwürdig.. wenn ich die klassen einzeln in die jar kopiere dann funktionierts. wenn ich alles per batch ablaufen lasse nicht. sind es vllt zu viele?

danke
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben