javac 옵션: 지정된 디렉토리 아래에 있는 모든 Java 파일을 재귀적으로 컴파일합니다.
의 Java .javac은 Java 파일을 컴파일하고 있습니다.은 다음과 같은 배포됩니다.com.vistas.util
,com.vistas.converter
,com.vistas.LineHelper
,com.current.mdcontect
.
각 패키지에는 여러 개의 Java 파일이 있습니다.javac을 다음과 같이 사용하고 있습니다.
javac com/vistas/util/*.java com/vistas/converter/*.java
com.vistas.LineHelper/*.java com/current/mdcontect/*.java
(한 줄로)
이렇게 많은 경로를 제공하는 대신 어떻게 컴파일러에 부모 com 디렉토리에서 모든 Java 파일을 반복적으로 컴파일할 수 있을까요?
또, 빌드 툴의 종류(Ant 또는 Maven, Ant가 이미 제안되고 있어 컴파일을 처리하는 것이 용이함) 또는 컴파일을 처리하는 IDE를 사용하는 것도 추천합니다(Eclipse는 조정 전략을 사용하여 증분 컴파일을 사용하고 있으며, "컴파일" 버튼을 누를 필요도 없습니다.
Javac 사용
를 위해 근처에 도구가 경우 할 수 .javac
오퍼: 컴파일할 클래스 이름을 파일로 지정할 수 있습니다..javac
@
프레픽스
수 *.java
프로젝트 내의 파일을 쉽게 만들 수 있습니다.
# Linux / MacOS
$ find -name "*.java" > sources.txt
$ javac @sources.txt
:: Windows
> dir /s /B *.java > sources.txt
> javac @sources.txt
- 장점은 빠르고 쉬운 해결책이라는 것입니다.
- 단점으로는, 이 기능을 재생성해야 한다는 것입니다.
sources.txt
새로운 소스를 작성하거나 기존 파일의 이름을 변경할 때마다 파일을 작성합니다.이 파일은 잊어버리기 쉽고(오류가 발생하기 쉬우며) 귀찮은 작업입니다.
빌드 도구 사용
장기적으로는 소프트웨어를 구축하도록 설계된 도구를 사용하는 것이 좋습니다.
개미 사용
한 「」를 했을 경우.build.xml
'CHANGE: 'CHANGE: 'CHANGE: 'CHANGE: 'CHANGE:
<project default="compile">
<target name="compile">
<mkdir dir="bin"/>
<javac srcdir="src" destdir="bin"/>
</target>
</project>
다음 명령을 실행하여 소프트웨어 전체를 컴파일할 수 있습니다.
$ ant
- 확장하기 쉬운 표준 빌드 도구를 사용하는 것이 장점입니다.
- 단점은 추가 툴을 다운로드, 셋업 및 학습해야 한다는 것입니다.대부분의 IDE(NetBeans 및 Eclipse 등)는 빌드 파일 쓰기를 매우 지원하므로 이 경우 아무것도 다운로드할 필요가 없습니다.
Maven 사용
Maven은 셋업하고 함께 일하기에 그리 사소한 일은 아니지만, 그것을 배우는 것은 좋은 이익이 된다.여기 5분 안에 프로젝트를 시작할 수 있는 훌륭한 튜토리얼이 있습니다.
- (저에게는) 의존 관계도 처리할 수 있기 때문에 Jar 파일을 더 이상 다운로드하여 수동으로 관리할 필요가 없다는 것이 큰 프로젝트의 구축, 패키징 및 테스트에 더 유용하다는 것을 알게 되었습니다.
- 단점은 학습 곡선이 가파르고 Maven 플러그인이 오류를 억제하는 것을 좋아하는 경우:-) 또 다른 점은 Maven 저장소(Sbt for Scala, Ivy for Ant, Graddle for Groovy 등)에서도 많은 툴이 작동한다는 것입니다.
IDE 사용
이제 개발 생산성을 높일 수 있습니다.몇 가지 오픈 소스 대안(Eclipse나 NetBeans 등)과 심지어 인텔리J와 같은 상용 대안(IntelliJ 등)이 있습니다.
그들은 백그라운드에서 프로젝트 빌딩을 관리할 수 있기 때문에 모든 명령줄을 처리할 필요가 없습니다.단, 백그라운드에서 실제로 무슨 일이 일어나는지 알고 있으면 항상 편리합니다.따라서 다음과 같은 에러를 검출할 수 있습니다.ClassNotFoundException
.
추가 노트 1개
대규모 프로젝트에서는 항상 IDE 및 빌드 도구를 사용하는 것이 좋습니다.전자는 생산성을 향상시키고 후자는 프로젝트에서 다른 IDE를 사용할 수 있게 합니다(예를 들어 Maven은 간단한 작업으로 Eclipse 프로젝트 기술자를 생성할 수 있습니다).mvn eclipse:eclipse
명령)을 실행합니다.의 라인 할 수 도입할 수 1개의 라인·커맨드로 테스트/빌드 할 수 있습니다. 죽 먹기
find . -name "*.java" -print | xargs javac
좀 잔인하지만, 지옥처럼 작동합니다.(작은 프로그램에만 사용해도 전혀 효율적이지 않습니다)
프로젝트 전체를 컴파일하는 일반적인 경우 javac을 메인 클래스와 함께 제공하면 모든 필수 종속성을 컴파일할 수 있습니다.
javac -sourcepath . path/to/Main.java
만약 당신의 셸이 그것을 지원한다면, 이와 같은 것이 작동할까요?
javac com/**/*.java
하시는 셸이 를 지원하지 **
아마, (어쩌면)
javac com/*/*/*.java
(3개의 컴포넌트로 구성된 모든 패키지에 적용 가능)
javac -cp "jar_path/*" $(find . -name '*.java')
(xargs는 분할하여 javac을 여러 번 실행할 수 있으므로 사용하지 않는 것이 좋습니다.각각 javac 파일의 서브셋이 포함되어 있으며, 그 중 일부는 동일한 javac 명령줄에 지정되지 않은 다른 파일을 Import할 수 있습니다.)
App.java 엔트리 포인트가 있는 경우 -sourcepath를 사용하는 freaker 방식이 가장 좋습니다.Import-Dependency에 따라 필요한 다른 모든 Java 파일을 컴파일합니다.예:
javac -cp "jar_path/*" -sourcepath src/ src/com/companyname/modulename/App.java
타겟 클래스 파일 dir 를 지정할 수도 있습니다.-d target/
.
개미를 사용하는 것을 추천합니다.개미는 이 작업에 매우 적합하고 이해하기 쉽고 문서화되어 있습니다.
build.xml 파일에서 다음과 같은 대상을 정의하면 됩니다.
<target name="compile">
<javac srcdir="your/source/directory"
destdir="your/output/directory"
classpath="xyz.jar" />
</target>
다음과 같은 간단한 make 파일을 사용하여 make를 사용하고 있습니다.
JAVAC = javac -Xlint:unchecked
sources = $(shell find . -type f -name '*.java')
classes = $(sources:.java=.class)
all : $(classes)
clean :
rm -f $(classes)
%.class : %.java
$(JAVAC) $<
한 번에 하나씩 소스를 컴파일하고 필요한 경우에만 재컴파일합니다.
javac 명령어는 재귀 컴파일 프로세스를 따르지 않으므로 명령어를 실행할 때 각 디렉토리를 지정하거나 포함할 디렉토리가 포함된 텍스트파일을 제공해야 합니다.
javac -classpath "${CLASSPATH}" @java_sources.txt
Xcode JNI 프로젝트에서 재귀적으로 테스트 클래스를 구축하기 위해 사용하고 있습니다.
find ${PROJECT_DIR} -name "*.java" -print | xargs javac -g -classpath ${BUILT_PRODUCTS_DIR} -d ${BUILT_PRODUCTS_DIR}
언급URL : https://stackoverflow.com/questions/6623161/javac-option-to-compile-all-java-files-under-a-given-directory-recursively
'programing' 카테고리의 다른 글
strdup() - C에서 무엇을 합니까? (0) | 2022.08.09 |
---|---|
JavaBeans가 사용되는 장소? (0) | 2022.08.09 |
webpack 2 및 vue-cli를 사용하여 로컬 글꼴로 로드 (0) | 2022.08.09 |
Java에서 Integer와 int의 차이점은 무엇입니까? (0) | 2022.08.09 |
커스텀 입력 Vue 컴포넌트를 테스트하는 방법 (0) | 2022.08.09 |