Maven project.build.directory

173

В Maven, что project.build.directoryотносится к? Я немного запутался, он ссылается на каталог исходного кода или целевой каталог в проекте Maven?

фейсал абдулай
источник

Ответы:

224

Вы можете найти эти свойства в супер-помпе.

Вы найдете банку здесь:

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

Откройте банку с помощью 7-zip или другого архиватора (или воспользуйтесь инструментом jar).

Перейдите к

org/apache/maven/model

Там вы найдете pom-4.0.0.xml.

Он содержит все эти «короткие пути»:

<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>

Обновить

После некоторого лоббирования я добавляю ссылку наpom-4.0.0.xml . Это позволяет просматривать свойства, не открывая локальный файл JAR.

Maba
источник
Я бы предложил онлайн ссылку вместо файла, который заархивирован в банку. Это: maven.apache.org/ref/3.0.3/maven-model/maven.html
khmarbaise
18
@khmarbaise Ну, это тоже хорошо, но не показывает значение по умолчанию, project.build.directoryнапример. Это то, что я хотел показать.
Маб
Зеркало github позволяет связываться с определенным номером строки: github.com/apache/maven-3/blob/trunk/maven-model-builder/src/… В противном случае оно находится в svn по адресу: svn.apache.org/repos/asf / maven / maven-3 / багажник /…
Мартин Эллис,
@MartinEllis Хорошо, я также обновил свой ответ ссылкой. Спасибо!
Маб
Я искал источник репозитория Maven по адресу github.com/apache/maven . Относительно небольшое количество попаданий (9). Ничто не устанавливает это свойство напрямую. Это должно быть где-то установлено! Этот URL показывает результаты поиска, которые я видел: github.com/apache/maven/…
PatS
45

Он указывает на ваш выходной каталог верхнего уровня (который по умолчанию target):

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

РЕДАКТИРОВАТЬ: Как было указано, Codehaus сейчас, к сожалению, не существует. Вы можете найти подробную информацию об этих свойствах от Sonatype здесь:

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

Если вы когда-нибудь пытаетесь ссылаться на выходные каталоги в Maven, вам никогда не следует использовать буквальное значение, например target / classes . Вместо этого вы должны использовать ссылки на свойства для ссылки на эти каталоги.

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

sourceDirectory, scriptSourceDirectoryИ testSourceDirectoryобеспечить доступ к исходным каталогам для проекта. outputDirectoryи testOutputDirectoryпредоставить доступ к каталогам, в которые Maven собирается поместить байт-код или другие выходные данные сборки. directoryотносится к каталогу, который содержит все эти выходные каталоги.

sdouglass
источник
1
Хостинг codehause.org прекращен, и эта ссылка больше не работает.
Бартош Фирн,
Да, правда и грустно. Я обновил с рабочей ссылкой и процитировал соответствующий раздел связанной страницы.
sdouglass
7
... так project.base.dirуказывает на корневой каталог проекта, где находится pom.xml. Вот почему после этого project.build.directoryопределяется Maven ${project.basedir}/target. Спасибо, ребята, я этого не знал.
evaldeslacasa
1
Хотя, похоже, это правда, но как вы получили эту информацию: «project.base.dir указывает на корневой каталог проекта, где находится pom.xml». Где я могу увидеть это определение?
квартал
2
Предположим, ваш проект называется project-A, а в рамках project-A объявлен pom.xml, затем он ${project.build.sourceDirectory}указывает project-A/src/main/java, ${project.build.scriptSourceDirectory}указывает на project-A/src/main/scripts, ${project.build.testSourceDirectory}указывает на project-A/src/test/java, ${project.build.directory}указывает на project-A/target, ${project.build.directory}указывает на project-A/target/classes, ${project.build.testOutputDirectory}указывает на project-A/target/test-classes.
sc30
4

Вы можете найти самый актуальный ответ для значения в вашем проекте, просто выполните

mvn3 help:effective-pom

Команда и найти значение <build> ... <directory>тега в результате или в эффективном pom. Он покажет значение Super POM, если вы не перезаписали.

Верх Иштван
источник