如何更改Maven目标目录的创建方式?

时间:2013-06-12 13:49:00

标签: maven directory maven-plugin

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

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果你想将你的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>

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

答案 1 :(得分:1)

参见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:是你的ramdisk。 然后你可以使用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>

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