【问题标题】:How to change the way Maven target directory is created?如何更改 Maven 目标目录的创建方式?
【发布时间】:2016-05-11 03:22:24
【问题描述】:

我想知道哪个 maven-plugin 负责创建目录 /target 或 pom 中配置的任何内容。

出于某些原因,我想更改此文件夹的创建方式(链接而不是目录)。

另一种选择是在创建此目标文件夹之前运行我自己的插件,但我不知道如何确保我会成为第一个。

有什么想法吗?

【问题讨论】:

  • 您想实现什么?从目标文件夹创建链接听起来有点奇怪?
  • 我想创建一个指向我的 ramdisk 的目标文件夹

标签: maven directory maven-plugin


【解决方案1】:

如果你想将你的build 目录指向 ramdisk,我建议你不要链接到它,而是使用指向那里的属性,例如

<properties>
  <custom.build.directory>/path/to/ram/disk/${project.groupId}/${project.artifactId}</custom.build.directory>
</properties>
<build>
  <directory>${custom.build.directory}</directory>
  ...
</build>

我建议,您最好将此指令放入仅在您的系统上激活的自定义配置文件中。

【讨论】:

  • 这是一种标准方式,但不幸的是它可能有缺点。一些从 Maven 调用的编写不佳的构建脚本,即 ant-run、enunciate 等,可能会认为目标文件夹位于 src 目录附近。另一个原因是 IDE 中的一些运行配置可能期望二进制文件在目标中。此外,离开您的消息来源可能会让人不舒服。
【解决方案2】:

DefaultMavenResourcesFiltering 类。 据我了解,如果需要,它会从任何生命周期动态创建target。 所以你无法预测 outputDirectory 的确切创建时间。

但根据Lifecycle Reference“初始化构建状态,例如设置属性或创建目录。” - 它应该在这个阶段创建。在我看来,这是一个错误,应该报告。

您可以尝试使用 exec 或 antrun 插件创建任何文件夹:

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.3</version>
                    <executions>
                        <execution>
                            <id>createInMemoryTarget</id>
                            <phase>initialize</phase>
                            <configuration>
                                <tasks>
                                    <mkdir dir="M:/${project.groupId}/${project.artifactId}/${project.version}"/>
                                </tasks>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

M: 是您的虚拟磁盘。 然后你可以用junction plugin 挂载:

                <plugin>
                    <groupId>com.pyx4j</groupId>
                    <artifactId>maven-junction-plugin</artifactId>
                    <version>1.0.3</version>
                    <executions>
                        <execution>
                            <id>symlinkTargetToInMemory</id>
                            <phase>initialize</phase>
                            <goals>
                                <goal>link</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <links>
                            <!-- link the target folder to appropriate in-memory to directory -->
                            <link>
                                <src>M:/${project.groupId}/${project.artifactId}/${project.version}</src>
                                <dst>${project.build.directory}</dst>
                            </link>
                        </links>
                    </configuration>
                </plugin>

然后,您可以将这两个插件的配置放在配置文件中,并在需要时激活它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-30
    • 2011-01-31
    • 2016-04-11
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多