使用maven进行树外构建。可能吗?

时间:2012-11-01 07:55:07

标签: java maven build

我开始学习几个发行版的包装(目前是Cygwin和Debian)。

他们需要构建系统以允许树外构建(同义词源外构建):

http://wiki.debian.org/UpstreamGuide#Out-of-Tree_Builds

要解决“哑”构建系统,例如 cygport 建议使用 lndir (来自 xutils 项目):

  lndir ${S} ${B}
  cd {B}
  ...build-commands...

我读了 mvn(1)手册页,但没有发现任何适当的内容。接下来我试试:

  $ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  ...
  $ pwd
  /maven/simple
  $ ls 
  my-app
  $ mvn -f my-app/pom.xml compile
  ...
  [INFO] --- maven-compiler-plugin:2.0.2:compile (default-compile) @ my-app ---
  [INFO] Compiling 1 source file to /maven/simple/my-app/target/classes

您可以看到在源根层次结构中创建的目标目录,而我正在寻找避免此问题的方法。

是否可以使用maven构建 out-of-tree ?怎么样?

2 个答案:

答案 0 :(得分:6)

您可以这样做,以便在当前的工作目录中获取它:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.stackoverflow</groupId>
    <artifactId>Q13173063</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>${project.artifactId}-${project.version}</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <buildDir>${user.dir}</buildDir>
    </properties>

    <build>
        <directory>${buildDir}</directory>
    </build>
</project>

然后你可以发出

mvn -f my-app/pom.xml compile

它将为您提供当前工作目录中的课程。

并轻松更改为另一个输出目录:

mvn -f my-app/pom.xml -DbuildDir=/tmp/build compile

答案 1 :(得分:3)

可能就像拥有

一样简单
<build>
    <directory>/your/build/directory</directory>
</build>
pom.xml中的

/your/build/directory不必位于源代码树中,可以使用通常的${...}语法进行参数化。

干杯,