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

gav*_*koa 5 java build maven

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

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

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

要解决"dumb"构建系统,例如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 进行树外构建?如何?

mab*_*aba 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>
Run Code Online (Sandbox Code Playgroud)

然后你可以发出

mvn -f my-app/pom.xml compile
Run Code Online (Sandbox Code Playgroud)

它将为您提供当前工作目录中的类.

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

mvn -f my-app/pom.xml -DbuildDir=/tmp/build compile
Run Code Online (Sandbox Code Playgroud)


And*_*rup 3

这可能就像有一个简单的

<build>
    <directory>/your/build/directory</directory>
</build>
Run Code Online (Sandbox Code Playgroud)

在你的 pom.xml 中。/your/build/directory不需要位于源代码树中,并且可以使用通常的${...}语法进行参数化。

干杯,