~ 2400 개의 클래스가있는 Java 프로젝트가 있습니다. 그들은 대부분 XML 스키마에서 XJC를 사용하여 몇 가지 확장자를 사용하여 생성됩니다.Java 컴파일 속도
편집 작업에 20 분 정도의 시간이 소요되며,이를 개선하기 위해 수행 할 수있는 작업이 있는지 궁금합니다.
유사한 프로젝트의 생성 클래스 수는 절반이지만, 수작업으로 작성된 클래스는 약 3000 개입니다. 이것은보다 위장 할 수있는 2-5 분 동안 컴파일됩니다.
컴파일 할 때 Java 8 (Windows의 경우 1.8.0_92)을 사용하고 있지만 소스 및 대상 버전 6을 사용하고 있습니다 (따라서 Java 8에서는 느린 유형의 시스템이 아닙니다). 컴파일은 maven-compiler-plugin 3.5.1을 사용하여 Maven 3.3.3을 사용하여 수행됩니다. 나는 Maven에서 컴파일러를 포킹하고 maxmem 2048m을 사용한다.
생성 된 클래스는 일반적으로 작지만 모든 생성 된 클래스를 다루는 거대한 방문객이 하나 있습니다 (따라서 하나는 모두, 하나는 모든 종속성에 해당). 나는 이것에 관해서 정말로 아무것도 할 수 없다.
"mvn clean install"에서 "mvn install"(또는 "mvn compile")로 전환하는 것이 도움이되지만, 항상 옵션이 아닙니다 (기본적으로 Eclipse는 컴파일 된 파일을 사용하므로 테스트가 제대로 실행됩니다.) , 내가 커밋하기 전에 같은 명령에서 테스트를 실행하는 동안 청소해야합니다).
편집 단위 파일 (예 : Eclipse/SourceTree)을 보는 백그라운드 프로세스가 없지만 스위치를 끌 수없는 바이러스 스캐너가 있습니다. 대부분의 시간은 javac에 의해 소비 된 것 같습니다.
javac에는 상호 종속적 인 클래스 수의 수퍼 선형이있는 무언가가 있습니까? 아니면이 컴파일 시간을 피할 수있는 방법이 있습니까?
: Maven 멀티 스레드 실행에 대한 제안이 있습니다. 불행히도 저는 이미 이것을 시도해 보았습니다. 그리고 많은 상호 의존적 인 클래스를 가진 단일 모듈 프로젝트이므로 여기서는별로 도움이되지 않습니다.
E2 : 프로젝트를 JAXB 코드 만있는 모듈과 메인 코드를 사용하여 모듈로 분할했습니다. JAXB 코드는 범인이 아니 었습니다. Tesla Maven Profiler을 실행했고 컴파일이 문제인지 확인했습니다. 관련 부분 :
org.apache.maven.plugins:maven-compiler-plugin:3.5.1 (default-compile) 18m 48s
org.apache.maven.plugins:maven-compiler-plugin:3.5.1 (default-testCompile) 14s 770ms
org.apache.maven.plugins:maven-surefire-plugin:2.12.4 (default-test) 1m 51s
org.apache.maven.plugins:maven-war-plugin:2.0.1 (default-war) 14s 635ms
나는 지난 세 시간 동안 완벽하게 괜찮습니다.
이것은 단지 1000 개의 Java 클래스이며 모두 JAXB를 사용하여 생성 된 일반적인 방문자를 상속합니다. 내 컴파일 구성 :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<fork>true</compiler>
<source>${compileSource}</source>
<target>${compileSource}</target>
<meminitial>512m</meminitial>
<maxmem>2048m</mexmem>
<encoding>UTF-8<eencoding>
</configuration>
</plugin>
(compileSource이 1.6)
Re : "컴파일 된 파일로 이클립스 나사 제거": Eclipse와의 충돌을 피하기 위해 Eclipse에서 "자동으로 빌드"를 선택적으로 활성화/비활성화하여 많은 것을 향상시킬 수 있습니다. 한 번에 하나의 도구 만 프로젝트에서 작동하도록하십시오. Maven이 실행 된 후에 Eclipse에서 리소스를 새로 고치는 것을 잊지 마십시오. –