java 자바 - 복수의 src 디렉토리로 컴파일




이미지 아이콘 (7)

단일 메이븐 프로젝트에서 여러 자바 소스 디렉토리를 컴파일하는 방법이 있습니까?


Answers

나는 순진하게 이렇게한다.

<build>
  <finalName>osmwse</finalName>
  <sourceDirectory>src/main/java, src/interfaces, src/services</sourceDirectory>
</build>

이것은 resources 태그를 정의하여 maven과 함께 작동합니다. 원하는대로 src 폴더 이름을 지정할 수 있습니다.

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>

        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>

        <resource>
            <directory>src/main/generated</directory>
            <includes>
                <include>**/*.java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>

intelliJ에서 작동하도록하려면 다음을 추가 할 수도 있습니다.

<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>

메이븐 - 컴파일러 - 플러그인으로


게시물에서 build-helper-maven-plugin을 사용하고 src / main / generated를 업데이트합니다. 그리고 mvn clean 컴파일은 내 ../common/src/main/java 또는 ../common에서 작동하므로 후자는 그대로 유지됩니다. 그런 다음 David Philips가 언급 한대로 IntelliJ IDEA (ver 10.5.2) 수준의 편집 작업이 실패했음을 확인했습니다. 문제는 IDEA가 프로젝트에 다른 소스 루트를 추가하지 않았다는 것입니다. 수동으로 추가하면 문제가 해결됩니다. 프로젝트의 편집 내용이 IDEA의 프로젝트 옵션을 직접 편집하지 않고 maven에서 가져와야하므로 좋지 않습니다. 그러나 자동으로 소스를 추가 할 수 있도록 build-helper-maven-plugin을 직접 지원하기 전까지는 함께 살 수있을 것입니다.

그래도이 작업을 수행하려면 다른 해결 방법이 필요합니다. IDEA가 pom을 변경 한 후 IDEA가 maven 설정을 다시 가져올 때마다 새로 추가 된 소스가 모듈에 보관되었지만 소스 폴더 선택을 잃어 버렸고 쓸모가 없었습니다. 그래서 IDEA의 경우 - 한 번 설정해야합니다.

  • - 프로젝트 설정 / 메이븐 / 가져 오기 / 소스 및 테스트 폴더를 다시 가져 오기에서 선택하십시오.
  • 추가 - 프로젝트 구조 / 프로젝트 설정 / 모듈 / {모듈} / 소스 / 컨텐츠 루트 추가.

지금 그 폴더를 가져 오기로 유지하는 것은 세계에서 가장 좋은 방법은 아니지만 ... 시도해보십시오.


이 작업은 두 단계로 수행 할 수 있습니다.

  • 각 소스 디렉토리마다 자신 만의 모듈을 만들어야합니다.
  • 모든 모듈에서 동일한 빌드 디렉토리를 지정해야합니다 : ${build.directory}

시작된 Jetty ( jetty:run )로 작업하면 모든 모듈 (Maven, IDEA 또는 Eclipse 포함)의 클래스를 다시 컴파일하면 Jetty가 다시 시작됩니다. 수정 된 리소스에 대해 얻을 수있는 것과 동일한 동작입니다.


이것은 나를 위해 일했다.

<build>
    <sourceDirectory>.</sourceDirectory>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
        <includes>
            <include>src/main/java/**/*.java</include>
            <include>src/main2/java/**/*.java</include>
        </includes>
        </configuration>
        </plugin>
    </plugins>
</build>

C ++에서 자주 사용되는 부울 연산은 컴파일 된 프로그램에서 많은 분기를 생성합니다. 이러한 분기가 루프 내부에 있고 예측하기가 어렵다면 실행이 크게 느려질 수 있습니다. 부울 변수는 및 for 값 0을 갖는 8 비트 정수로 저장됩니다 .false1true

부울 변수는 입력으로 부울 변수가있는 모든 연산자가 입력이 다른 값을 가지면 확인합니다. 01, 부울을 출력으로 갖는 연산자는 0또는 이외의 다른 값을 생성 할 수 없습니다 1. 따라서 부울 변수를 사용하는 연산이 입력보다 덜 효율적입니다. 고려해보기 :

bool a, b, c, d;
c = a && b;
d = a || b;

일반적으로 다음과 같은 방법으로 컴파일러에서 구현됩니다.

bool a, b, c, d;
if (a != 0) {
    if (b != 0) {
        c = 1;
    }
    else {
        goto CFALSE;
    }
}
else {
    CFALSE:
    c = 0;
}
if (a == 0) {
    if (b == 0) {
        d = 0;
    }
    else {
        goto DTRUE;
    }
}
else {
    DTRUE:
    d = 1;
}

이 코드는 최적이 아닙니다. 잘못 예측할 경우 분기에 시간이 오래 걸릴 수 있습니다. 부울 연산은 피연산자가 0와 (와) 다른 값을 가지지 않는다는 것이 확실하다면 훨씬 효율적으로 만들 수 있습니다 1. 컴파일러가 이러한 가정을하지 않는 이유는 변수가 초기화되지 않았거나 알 수없는 출처에서 나온 경우 변수가 다른 값을 가질 수 있기 때문입니다. 위의 코드는 유효한 값으로 초기화 된 경우 ab부울 출력을 생성하는 연산자에서 나온 경우 최적화 될 수 있습니다 . 최적화 된 코드는 다음과 같습니다.

char a = 0, b = 1, c, d;
c = a & b;
d = a | b;

char대신 부울 연산자 ( 및 ) 대신 bool비트 연산자 ( &|) 를 사용할 수 있도록하기 위해 대신 사용됩니다 . 비트 연산자는 단 하나의 클록 사이클을 취하는 단일 명령어입니다. 는 OR 연산자 ( ) 경우에도 작동 및 이외의 값을 가지고 나 . AND 연산자 ( )와 EXCLUSIVE OR 연산자 ( 피연산자가 아닌 다른 값을 가질 경우) 일치 결과를 얻을 수있다 와 .&&|||ab01&^01

~NOT에 사용할 수 없습니다. 대신, 알려진 변수에 부울 NOT을 만들 0거나 1XOR 할 수 있습니다 1.

bool a, b;
b = !a;

다음과 같이 최적화 할 수 있습니다.

char a = 0, b;
b = a ^ 1;

a && b로 대체 할 수없는 a & b경우 b경우 평가하지 말아야 표현이다 a입니다 false( &&평가하지 않습니다 b, &것입니다). 마찬가지로 a || b대체 될 수없는 a | b경우 b경우 평가 안되는 표현 a이다 true.

비트 연산자를 사용하는 것이 피연산자가 변수 인 경우 피연산자가 비교 인 경우보다 유리합니다.

bool a; double x, y, z;
a = x > y && z < 5.0;

대부분의 경우에 최적입니다 ( &&표현식에서 많은 분기 오보를 생성 하지 않는다면 ).





java maven-2