Maven: указать outputDirectory только для упаковки банку? - PullRequest
54 голосов
/ 21 января 2011

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

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

Ответы [ 4 ]

62 голосов
/ 21 января 2011

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

-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>
45 голосов
/ 21 января 2011

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

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

Документация по параметру указывает, что параметр инициализируется значением свойства ${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). Недостаток: теперь всегда нужно использовать параметр -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 Plugin

Теперь, если вы просто хотите изменить 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 голосов
/ 07 июля 2015

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

Вместо создания профиля и использования mvn всегда с помощью переключателя -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
0 голосов
/ 23 апреля 2019

Если вы хотите скопировать также файлы зависимостей в целевую папку, используйте maven-dependency-plugin.

<project>
  ...
  ...

      <build>
        <plugins>
          <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <phase>install</phase>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>

</project>
...