Maven:指定outputDirectory仅用于打包jar?

时间:2011-01-21 09:57:32

标签: maven-2 maven

如何指定outputDirectory仅用于打包jar?

http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html这显示了所有参数,但是如何在命令行或pom.xml中设置它们?

4 个答案:

答案 0 :(得分:62)

在命令行上

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

答案 1 :(得分:45)

参数表达式

关于命令行用法:

The parameter documentation指定将参数初始化为属性${project.build.directory}的值(这是指向目标文件夹的属性)

这就是这意味着:

  

对于想要的mojos   直接从CLI执行,他们的   参数通常提供一种手段   通过系统属性配置   而不是<configuration/>部分   在POM中。插件文档   对于那些参数将列出一个   表示系统的表达式   配置的属性。在   上面的mojo,参数url是   与表达相关联   ${query.url},意思是它的价值   由系统属性指定   query.url如下所示:

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

<强>参考:

配置$ {project.build.directory}

但是,${project.build.directory}不是it's a propertyProject对象的系统属性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插件

现在,如果您只想从命令行更改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

答案 2 :(得分:3)

感谢@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

答案 3 :(得分:0)

如果您还希望将依赖关系jar也复制到目标文件夹,请使用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>