5

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

他们需要构建系统以允许树外构建(同义词out-of-source build):

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

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

  lndir ${S} ${B}
  cd {B}
  ...构建命令...

我阅读了mvn(1)手册页,但没有找到任何合适的内容。接下来我只是尝试:

  $ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  ...
  $密码
  /行家/简单
  $ ls
  我的应用
  $ mvn -f my-app/pom.xml 编译
  ...
  [信息] --- maven-compiler-plugin:2.0.2:compile (default-compile) @ my-app ---
  [INFO] 将 1 个源文件编译到 /maven/simple/my-app/target/classes

如您所见,在我寻找避免这种情况的方法时,在源根层次结构中创建了目标目录。

是否可以使用 maven进行树外构建?如何?

4

2 回答 2

7

您可以这样做以将其放在当前的工作目录中:

<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
于 2012-11-01T08:22:23.383 回答
3

它可能就像拥有一个

<build>
    <directory>/your/build/directory</directory>
</build>

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

干杯,

于 2012-11-01T08:01:56.583 回答