как создать банку с скомпилированными классами из исходной банки в java

Я знаю, как создать банку из файлов .java или .class.

У меня есть sources.jar, который содержит .java файлов. Я хочу скомпилировать эти классы и снова упаковать их в jar.

например: Это банка, которую я хочу скомпилировать:

hadoop-mapreduce-examples-2.2.0-test-sources.jar.

Я сделал jar xvf hadoop-mapreduce-examples-2.2.0-test-sources.jar, чтобы извлечь все.

теперь у меня есть

    ls
    META-INF    org

    ls org/apache/hadoop/
examples    mapreduce

    ls org/apache/hadoop/examples/
TestBaileyBorweinPlouffe.java   TestWordStats.java      pi              terasort

Как вы можете заметить, у меня есть два пакета в org.apache.hadoop, "examples и mapreduce", оба из которых должны быть скомпилированы. И у меня есть подпакеты в «примерах», которые нужно скомпилировать.

javac org/apache/hadoop/mapreduce/lib/db/TestDBJob.java

Это хорошо скомпилировано

Но как я могу скомпилировать рекурсивно. Я попытался использовать подстановочный знак «*».

Вот что я пробовал:

javac -cp org/apache/hadoop/examples/*
javac: invalid flag: org/apache/hadoop/examples/pi
Usage: javac <options> <source files>
use -help for a list of possible options
javac org/apache/hadoop/examples/*.*

В последнем javac, выполненном выше, я не вижу компилируемых подпакетов. были скомпилированы только файлы Java верхнего уровня.

Есть ли простое решение, например

javac -jar <input.jar> <output.jar> приведет к <output-jar>, в котором есть скомпилированные файлы.

ИЗМЕНИТЬ:

Чтобы повторить мой вопрос:

учитывая банку, в которой есть только .java файлов, я хочу, чтобы файл jar содержал .class файлов самым простым способом.


person eagertoLearn    schedule 14.08.2014    source источник
comment
Нет ли файла сборки Ant или Maven?   -  person Antimony    schedule 15.08.2014


Ответы (2)


Из консоли ДОС

cd /dir/папка файлов .class.

jar cvf name.jar

person Edwin Maza Jara    schedule 14.08.2014
comment
Я знаю это. Это не мой вопрос. учитывая банку, в которой есть только .java файлов, мне нужен файл jar, в котором есть .class файлов. - person eagertoLearn; 15.08.2014

Вот действительно грязный скрипт, который я написал для сборки скомпилированного JAR из исходного JAR. Вероятно, он не будет работать для всего и даже не справляется с копированием манифеста:

#!/bin/bash

if [ "$#" -lt 1 ]; then
    echo "Usage: $0 sources.jar [classpath]"
    echo
    exit 1
fi

OUT_JAR=`basename $1-compiled.jar`

rm -rf $OUT_JAR
rm -rf src
rm -rf classes

mkdir src
mkdir classes

if [ -n "$2" ]; then
  CLASSPATH="-cp $2"
fi

unzip -d src $1
if [ $? -ne 0 ]; then
  echo "Unzip failed"
  exit 1
fi

find src -name *.java | xargs javac -d classes $CLASSPATH
if [ $? -ne 0 ]; then
  echo "Java compilation failed"
  exit 1
fi

jar cf $OUT_JAR -C classes .

if [ $? -ne 0 ]; then
  echo "Jar creation failed"
  exit 1
fi

echo
echo "Compiled and built $OUT_JAR"

Также доступно здесь: https://github.com/satur9nine/sources-jar-compiler/blob/master/compile-sources-jar.sh

person satur9nine    schedule 27.08.2020