Подтвердить что ты не робот

Maven: укажите outputDirectory только для упаковки банки?

Как я могу указать outputDirectory только для упаковки jar?

http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html показывает все параметры, но как их установить в командной строке или pom.xml?

4b9b3361

Ответ 1

в командной строке

-DoutputDirectory=<path>

и в pom.xml

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.3.1</version>
      <configuration>
        <outputDirectory>/my/path</outputDirectory>
      </configuration>
    </plugin>
  </plugins>
</build>

Ответ 2

Выражения параметров

О использовании командной строки:

Документация параметров указывает, что параметр инициализирован значением свойства ${project.build.directory} (который является свойством, относящимся к целевой папке )

Здесь это означает:

Для моджо, которые должны быть выполняются непосредственно из CLI, их параметры обычно обеспечивают настраиваться с помощью свойств системы вместо раздела <configuration/>в ПОМ. Документация плагина для этих параметров будет выражение, которое обозначает систему свойства для конфигурации. В mojo выше, параметр url равен связанных с выражением ${query.url}, то есть его значение может быть заданный системным свойством query.url, как показано ниже:

mvn myquery:query -Dquery.url=http://maven.apache.org

Справка:

Настройка ${project.build.directory}

Однако ${project.build.directory} не является системным свойством, это свойство Project Build объект.

Вы не можете установить внутренние свойства maven непосредственно в командной строке, но вы можете попасть туда с небольшим трюком, добавив в свой pom.xml заполнители:

<build>
    <directory>${dir}</directory>
</build>

Теперь выходной каталог устанавливается через свойство из командной строки (используя -Ddir=somedirectory). Downside: теперь вам всегда нужно использовать параметр -Ddir в командной строке.

Использование профилей

Но здесь тоже помогите. Просто используйте профиль, если вы хотите настроить каталог:

<profiles>
    <profile>
        <id>conf</id>
        <build>
            <directory>${dir}</directory>
        </build>
    </profile>
</profiles>

Теперь вы можете сделать

# everything goes in someOtherDir instead of target
mvn clean install -Pconf -Ddir=someOtherDir

или простой старый

# everything goes in target
mvn clean install

Настройка плагина Jar

Теперь, если вы просто хотите изменить jar outputDirectory из командной строки, не перенаправляя все из цели, мы изменим профиль, чтобы настроить плагин из свойства командной строки:

<profiles>
    <profile>
        <id>conf</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.3.1</version>
                    <configuration>
                        <outputDirectory>${dir}</outputDirectory>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Использование идентично выше:

# everything goes in someOtherDir instead of target
mvn clean install -Pconf -Ddir=someOtherDir

Ответ 3

Спасибо @Sean Patrick Floyd за отличное объяснение.

Вместо создания профиля и использования mvn всегда с -P переключателя -P, я хотел бы использовать другой способ, который делает значение по умолчанию для свойства $ {dir}.

Просто определите значение по умолчанию ${dir} как ${project.build.directory}

<properties>
    <dir>${project.build.directory}</dir>
</properties>

и так же, как @Sean Patrick Floyd, установите outputDirectory.

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.1</version>
        <configuration>
            <outputDirectory>${dir}</outputDirectory>
        </configuration>
    </plugin>
</plugins>

Теперь вы можете сделать

# everything goes in someOtherDir instead of target
mvn clean install -Ddir=someOtherDir

или старый

# everything goes in target
mvn clean install