Maven project.build.directory

172

W Maven, do czego to się project.build.directoryodnosi? Jestem trochę zdezorientowany, czy odwołuje się do katalogu kodu źródłowego lub katalogu docelowego w projekcie Maven?

faisal abdulai
źródło

Odpowiedzi:

224

Możesz znaleźć te właściwości maven w super pom.

Słoik znajdziesz tutaj:

${M2_HOME}/lib/maven-model-builder-3.0.3.jar

Otwórz słoik za pomocą 7-zip lub innego archiwizera (lub użyj narzędzia jar).

Nawigować do

org/apache/maven/model

Tam znajdziesz pom-4.0.0.xml.

Zawiera wszystkie te „skróty”:

<project>
    ...
    <build>
        <directory>${project.basedir}/target</directory>
        <outputDirectory>${project.build.directory}/classes</outputDirectory>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
        <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
        <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
        <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>${project.basedir}/src/test/resources</directory>
            </testResource>
        </testResources>
        ...
    </build>
    ...
</project>

Aktualizacja

Po pewnym lobbowaniu dodaję link dopom-4.0.0.xml . Pozwala to zobaczyć właściwości bez otwierania lokalnego pliku jar.

maba
źródło
Sugerowałbym odniesienie online zamiast pliku, który jest archiwizowany w słoiku. To: maven.apache.org/ref/3.0.3/maven-model/maven.html
khmarbaise
18
@khmarbaise Cóż, to również miłe, ale nie pokazuje project.build.directoryna przykład domyślnej wartości . To właśnie chciałem pokazać.
maba
Lustro github umożliwia linkowanie do określonego numeru linii: github.com/apache/maven-3/blob/trunk/maven-model-builder/src/ ... W przeciwnym razie jest w svn pod adresem: svn.apache.org/repos/asf / maven / maven-3 / trunk /…
Martin Ellis
@MartinEllis OK, zaktualizowałem również moją odpowiedź linkiem. Dziękuję Ci!
maba
Przeszukałem źródło repozytorium Maven na github.com/apache/maven . Stosunkowo mała liczba trafień (9). Nic nie określa tej właściwości bezpośrednio. To musi być gdzieś ustawione! Ten adres URL pokazuje wyniki wyszukiwania, które widziałem: github.com/apache/maven/ ...
PatS
44

Wskazuje na katalog wyjściowy najwyższego poziomu (którym jest domyślnie target):

https://web.archive.org/web/20150527103929/http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide

EDYCJA: Jak już wspomniano, Codehaus obecnie niestety nie istnieje. Szczegółowe informacje na temat tych nieruchomości od Sonatype można znaleźć tutaj:

http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-properties.html#resource-filtering-sect-project-properties

Jeśli kiedykolwiek próbujesz odwoływać się do katalogów wyjściowych w Maven, nigdy nie powinieneś używać wartości literałów, takich jak target / classes . Zamiast tego do odwoływania się do tych katalogów należy używać odwołań do właściwości.

    project.build.sourceDirectory
    project.build.scriptSourceDirectory
    project.build.testSourceDirectory
    project.build.outputDirectory
    project.build.testOutputDirectory
    project.build.directory

sourceDirectory, scriptSourceDirectoryOraz testSourceDirectoryzapewnienie dostępu do katalogów źródłowych projektu. outputDirectoryi testOutputDirectoryzapewnij dostęp do katalogów, w których Maven umieści kod bajtowy lub inne dane wyjściowe kompilacji. directoryodnosi się do katalogu, który zawiera wszystkie te katalogi wyjściowe.

sdouglass
źródło
1
Hosting codehause.org został zakończony i ten link już nie działa.
Bartosz Firyn
Tak, prawdziwe i smutne. Zaktualizowałem działającym linkiem i zacytowałem odpowiednią sekcję połączonej strony.
sdouglass
7
... więc project.base.dirwskazuje na katalog główny projektu, w którym znajduje się pom.xml. Dlatego po tym, project.build.directoryMaven definiuje ${project.basedir}/target. Dzięki chłopaki, nie wiedziałem tego.
evaldeslacasa
1
Chociaż wydaje się, że to prawda, ale skąd masz te informacje: „project.base.dir wskazuje na katalog główny projektu, w którym znajduje się pom.xml”. Gdzie mogę zobaczyć tę definicję?
kwartal
2
załóżmy, że twój projekt nazywa się projekt-A, a pod projektem-A deklarowany jest plik pom.xml, a następnie ${project.build.sourceDirectory}wskazuje project-A/src/main/java, ${project.build.scriptSourceDirectory}wskazuje project-A/src/main/scripts, ${project.build.testSourceDirectory}wskazuje project-A/src/test/java, ${project.build.directory}wskazuje project-A/target, ${project.build.directory}wskazuje project-A/target/classes, ${project.build.testOutputDirectory}wskazuje project-A/target/test-classes.
sc30
4

Możesz znaleźć najbardziej aktualną odpowiedź na wartość w swoim projekcie, po prostu wykonaj

mvn3 help:effective-pom

polecenie i znajdź wartość <build> ... <directory>tagu w wyniku, czyli w efektywnym-pom. Pokaże wartość Super POM, chyba że nadpisałeś.

Verhás István
źródło