Подтвердить что ты не робот

Компиляция java файлов во всех подпапках?

Как скомпилировать все java файлы во всех подпапках в Unix, используя javac?

4b9b3361

Ответ 1

Используйте инструмент построения, например Ant или Maven. Оба позволяют управлять зависимостями намного лучше, чем это может быть выполнено с использованием, например, инструмент find UNIX. И And и Maven также позволяют вам определять пользовательские задачи, которые должны выполняться в дополнение к компиляции. Кроме того, Maven предлагает соглашения для управления внешними зависимостями в удаленных репозиториях, а также соглашения для запуска модульных тестов и функций, которые поддерживают непрерывную интеграцию.

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

Наконец, большинство популярных приложений IDE и редактора кода имеют некоторую интеграцию с скриптами Ant build, поэтому вы можете запускать все задачи Ant из редактора. NetBeans, Eclipse, IDEA и многое другое также имеет встроенную поддержку Maven.

Сначала прочтите этот, если вы новичок в Ant. Ниже приведен пример файла сборки из ссылки:

<project name="MyProject" default="dist" basedir=".">
    <description>
        simple example build file
    </description>
  <!-- set global properties for this build -->
  <property name="src" location="src"/>
  <property name="build" location="build"/>
  <property name="dist"  location="dist"/>

  <target name="init">
    <!-- Create the time stamp -->
    <tstamp/>
    <!-- Create the build directory structure used by compile -->
    <mkdir dir="${build}"/>
  </target>

  <target name="compile" depends="init"
        description="compile the source " >
    <!-- Compile the java code from ${src} into ${build} -->
    <javac srcdir="${src}" destdir="${build}"/>
  </target>

  <target name="dist" depends="compile"
        description="generate the distribution" >
    <!-- Create the distribution directory -->
    <mkdir dir="${dist}/lib"/>

    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
    <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
  </target>

  <target name="clean"
        description="clean up" >
    <!-- Delete the ${build} and ${dist} directory trees -->
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
  </target>
</project>

Как только вы знакомы с Ant, вам будет легче перемещаться в Maven.

Ответ 2

В Windows...

Создайте пакетный файл:

for /r %%a in (.) do (javac %%a\*.java)

... затем выполните его в исходной папке верхнего уровня.

В Linux...

javac $(find ./rootdir/* | grep .java)

Оба ответа взяты из этой темы...

http://forums.oracle.com/forums/thread.jspa?threadID=1518437&tstart=15

Но, как предложили другие, инструмент построения, вероятно, окажется полезным.

Ответ 3

Я не знаю, если это лучший способ, но это должно работать:

find . -name "*.java" | xargs javac

Ответ 4

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

Ответ 5

Используйте Maven (как более современную альтернативу Ant).

Используйте IDE, например Eclipse (все IDE, которые, как я знаю, с радостью собирают для вас несколько исходных папок)

Ответ 6

Другой (менее гибкий) способ, если вы знаете, сколько уровней папок есть:

javac *.java */*.java */*/*.java */*/*/*.java */*/*/*/*.java ...

В зависимости от вашей оболочки вам, возможно, придется установить ее для расширения несогласованных шаблонов до нуля, в bash с помощью shopt -s nullglob. Например, я использую следующую функцию оболочки для поиска текста в своих java файлах:

function jgrep ()
{
    (
      shopt -s nullglob
      egrep --color=ALWAYS -n "[email protected]" *.tex *.java */*.java */*/*.java */*/*/*.java */*/*/*/*.java */*/*/*/*/*.java
    )
} 

jgrep String

Но на самом деле используйте инструмент построения, как говорили другие.