Быстрый, простой в обслуживании и распараллеливаемый способ создания Java-кода? - PullRequest
0 голосов
/ 01 сентября 2011

Я работаю над системой сборки, в которой долгое время накапливаются плохие практики и другие плохие практики, и сейчас я переписываю сборку. Используются следующие языки: C / C ++, Fortran, Ada и Java, и в настоящее время я придерживаюсь make-файлов в стиле GNU - хотя мы рассматриваем другие альтернативы, такие как SCons.

С учетом вышесказанного я ищу некоторые конкретные рекомендации, а не рекомендации в форме "использовать другую систему сборки" и т. Д.

Кто бы ни писал конкретный make-файл, на который я сейчас смотрю, планировал последовательную сборку кода Java, который выглядит примерно так:

LIST_OF_JAVA_FILES  = file1.java
LIST_OF_JAVA_FILES += file2.java
LIST_OF_JAVA_FILES += file3.java
...
LIST_OF_JAVA_FILES += fileN.java

all: ${LIST_OF_JAVA_FILES}

${LIST_OF_JAVA_FILES} : %.class : %.java
  ${JAVAC} ${CLASSPATH} ${<}

При условии, что вы выполняете сборку в серийном режиме, это прекрасно работает Однако, как только зависимости попадают в смесь, это становится более проблематичным.

  1. Компиляторы C / C ++ имеют встроенные опции для генерации зависимостей ... существует ли подобное средство для Java?
  2. Нужно ли использовать сторонние инструменты (например, Jikes) для создания зависимостей?
  3. Как правило, если команда использовала make-файлы для создания чего-либо, связанного с java, более типично вызывать java-компилятор один раз, перечисляя все .java файлы в одной командной строке -vs- по одной цели для каждого .class файл?
    • Если это более распространено, это просто для простоты или есть более глубокая причина?
    • примечание: я понимаю, что для последовательной сборки это будет более быстрый вариант, но я хочу получить ответ на эмпирические тесты для параллельных сборок

Ответы [ 3 ]

1 голос
/ 01 сентября 2011

У нас была похожая проблема в нашем проекте. Мы решили собрать весь код Java через ant и вызвать ant из make-файла.

Если у вас не много JNI (c ++ <----> java) зависимостей, это может работать и для вас.

Удачи.

0 голосов
/ 12 сентября 2011

В итоге оказалось наиболее целесообразным (и нормой для разработки java в целом) просто указать все исходные файлы за один шаг сборки и позволить javac разрешить все зависимости таким образом.

0 голосов
/ 01 сентября 2011

В большинстве случаев достаточно выполнить что-то вроде

javac -cp MY_CLASSPATH Main.java

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

Есть также ant и maven и ivy и все, что угодно, но этоизлишество для чего-то такого простого.

...