Почему никакое использование не, делают для Java?

Примерно каждый проект Java, что я видел или Знатока использования или Муравья. Они - прекрасные инструменты, и я думаю примерно, что любой проект может использовать их. Но что когда-нибудь, оказывалось, сделало? Это используется для множества проектов не-Java и может легко обработать Java. Уверенный необходимо загрузить make.exe, если Вы используете Windows, но Муравей и Знаток также не идут с JDK.

Есть ли некоторый фундаментальный дефект с, делают при использовании с Java? Это просто, потому что Муравей и Знаток записаны в Java?

154
задан User1 5 February 2010 в 19:31
поделиться

11 ответов

Не используйте курсор, если вы можете избежать его, обычно все, что вам действительно нужно, это присоединиться к созданной таблице. Если курсор выполняет обновление, вставку или удаление, вероятность того, что курсор не понадобится, составляет 99,9%. Курсоры должны быть техникой ПОСЛЕДНЕЙ инстанции не первой инстанции. Итерация по записям почти всегда является плохим выбором в базе данных. Учись мыслить наборами.

Почему следует избегать курсоров? Потому что они создают кошмары производительности. Я изменил процессы с 24 часов или более на менее чем минуту, удалив curosr.

-121--2814140-

Прошло много времени с тех пор, как я коснулся Калитки, но если память служит:

Не можете ли вы переопределить метод isVisible () вашего объекта «навигатора», так что он отображается только при условии, что вы хотите?

например что-то вроде

.addComponent(new AjaxPagingNavigator(...) {
  @Override public boolean isVisible() { 
    return model.getFound().size() > 25;
  }
});
-121--3594911-

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

С базовым C, который обычно "для преобразования файла main.c в файл main.o, запустите" cc main.c. "

Вы можете сделать это на java, но быстро научитесь чему-то.

Главным образом, компилятор javac медленно запускается.

Разница между

javac Main.java
javac This.java
javac That.java
javac Other.java

и

javac Main.java This.java That.java Other.java

- ночь и день.

Усугубьте это сотнями классов, и это просто становится несостоятельным.

Затем вы объединяете это с тем, что Java имеет тенденцию быть организованы как группы файлов в каталогах, vs C и других, которые имеют тенденцию к более плоской структуре. Make не имеет большой прямой поддержки для работы с иерархиями файлов.

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

С помощью Ant, он будет проходить и суммировать все файлы, которые устарели, а затем компилировать их за один раз. Make просто вызовет компилятор Java для каждого отдельного файла. Наличие make NOT сделать это требует достаточно внешней оснастки, чтобы действительно показать, что Make не совсем до задачи.

Вот почему такие альтернативы, как Муравей и Мавен, поднялись вверх.

183
ответ дан 23 November 2019 в 21:59
поделиться

Я никогда не пользовался GNU Make для проектов Java, но я пользовался jmk. К сожалению, она не обновлялась с 2002 года.

У него была некоторая специфическая для Java функциональность, но она была достаточно мала, чтобы включать в исходные тексты тарбол без значительного увеличения его размера.

В настоящее время я просто предполагаю, что любой Java-разработчик, с которым я делюсь кодом, установил Ant.

0
ответ дан 23 November 2019 в 21:59
поделиться

Если вы используете Windows... Проверьте Nexus:

http://developer.nvidia.com/object/nexus.html

-121--2583158-

Маститая программа make достаточно хорошо обрабатывает отдельно скомпилированные языки, такие как C и C++. При компиляции модуля используется # include для извлечения текста других файлов включения и записи одного файла объекта в качестве выходных данных. Компилятор в значительной степени представляет собой систему «один в раз» с отдельным этапом связывания для связывания объектных файлов в исполняемый двоичный файл.

Однако в Java компилятор фактически компилирует другие классы, импортируемые с помощью import . Хотя из исходного кода Java можно написать что-то, что сгенерировало бы все необходимые зависимости, так что make построит классы в правильном порядке по одному, это все равно не будет обрабатывать случаи, такие как циклические зависимости.

Компилятор Java также может быть более эффективным путем кэширования скомпилированных результатов других классов при компиляции дополнительных классов, которые зависят от результатов уже скомпилированных. Такой автоматический анализ зависимостей на самом деле невозможен только с помощью make .

-121--677084-

Муравей и Мейвен подходят к графу зависимостей построения и управлению им с более «современного» ракурса... Но, как говорит Оскар, они создали свои собственные проблемы, пытаясь решить старые проблемы с производством.

0
ответ дан 23 November 2019 в 21:59
поделиться

Одна важная причина заключается в том, что и Ant, и Maven (и большинство предназначенных для java инструментов SCM, CI и IDE) написаны на java разработчиками / для java-разработчиков. Это упрощает интеграцию в вашу среду разработки и позволяет другим инструментам, таким как серверы IDE и CI, интегрировать части библиотек ant / maven в инфраструктуру сборки / развертывания.

1
ответ дан 23 November 2019 в 21:59
поделиться

Одной из основных проблем, решаемых Maven (и настройками муравейника с включенным плющом) по сравнению с make, является автоматическое разрешение зависимостей и загрузка ваших банок с зависимостями.

9
ответ дан 23 November 2019 в 21:59
поделиться

Ant и более поздние версии Maven были разработаны, чтобы решить некоторые головные боли, вызванные Make (при создании новых в процессе). Это просто эволюция.

... Вскоре после этого несколько проектов Java с открытым исходным кодом осознали, что Ant может решить проблемы, которые у них были с Makefiles ....

Из http://ant.apache.org/faq.html# history

Решают ли они что-нибудь или просто создают дополнительный формат для обучения - это субъективная тема. По правде говоря, это в значительной степени история каждого нового изобретения: создатель говорит, что оно решает множество проблем, а первоначальные пользователи говорят, что это достоинства.

Главное преимущество - возможность интеграции с java.

Думаю, похожая история была бы, например, с рейком .

12
ответ дан 23 November 2019 в 21:59
поделиться

Все остальные ответы о технических достоинствах каждого из них верны. Ant и Maven могут быть лучше подходят для Java, чем make, или, как указывает Хэнк Гей, они не могут:)

Однако вы спросили, имеет ли значение, что Ant и Maven написаны на Java. Хотя в StackOverflow мы не рассматриваем такие мысли (закрытые! Не связанные с программированием! И т. Д.), КОНЕЧНО, ЭТО ЧАСТЬ. На рельсах мы используем Rake, парни из Си - make, а в Java - Ant и Maven. Хотя это правда, что разработчики Ant или Maven будут заботиться о Java-разработчике, возможно, лучше, чем другие, есть еще один вопрос: во что вы пишете задачи Ant? Ява. Если вы разработчик Java, это легко.

Так что да, отчасти это связано с использованием инструментов, написанных на языке, который вы используете.

17
ответ дан 23 November 2019 в 21:59
поделиться

Вопрос основан на неверном предположении: нетривиальное количество разработчиков используют make . См. Инструменты сборки Java: Ant против Maven . Что касается того, почему разработчик не мог использовать make : многие разработчики либо никогда не использовали make , либо использовали его и ненавидели его пламенем, который горит сильнее, чем тысяча солнц. По этой причине они используют альтернативные инструменты.

28
ответ дан 23 November 2019 в 21:59
поделиться

Сценарии Make по своей сути зависят от платформы. Предполагается, что Java не зависит от платформы. Поэтому наличие системы сборки, которая работает только на одной платформе для многоплатформенной исходной базы, является своего рода проблемой.

5
ответ дан 23 November 2019 в 21:59
поделиться

Давным-давно я работал над Java-проектом, в котором использовалась gmake. Мои воспоминания нечеткие, но IIRC нам было трудно иметь дело со структурой каталогов пакетов, которую ожидает javac. Я также помню, что создание файлов JAR было проблемой, если у вас не было чего-то тривиального.

1
ответ дан 23 November 2019 в 21:59
поделиться

Достопочтенная программа make достаточно хорошо обрабатывает отдельно скомпилированные языки, такие как C и C ++. Вы компилируете модуль, он использует #include для извлечения текста из других включаемых файлов и записывает один объектный файл в качестве вывода. Компилятор представляет собой систему, работающую по одному за раз, с отдельным этапом связывания объектных файлов в исполняемый двоичный файл.

Однако в Java компилятор должен фактически компилировать другие классы, которые вы импортируете с помощью import . Хотя можно было бы написать что-то, что генерировало все необходимые зависимости из исходного кода Java, так что make будет строить классы в правильном порядке по одному, это все равно не будет обрабатывать такие случаи, как циклический зависимости.

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

32
ответ дан 23 November 2019 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: