maven输出目录的问题

时间:2010-03-23 13:43:06

标签: maven-2

我在我的两个项目中使用了几乎相同的POM,它们位于相同的工作空间但它们根本不相关,但是它们是相关的,因为在我使用spring和jboss时都是如此。这是pom:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.springinaction.hello</groupId>
    <artifactId>spring-in-action</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-in-action</name>
    <url>http://maven.apache.org</url>
    <properties>
        <jboss.ome>C:\jboss-5.1.0.GA\server\default\deploy</jboss.ome>
        <springversion>2.5.3</springversion>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>${springversion}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <warName>spring-book</warName>
                    <outputDirectory>${jboss.ome}</outputDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我希望用这个POM实现的是我想在构建spring-book.war时命名我的战争并将其复制到我指定的Jboss位置。现在,在我的第一个项目中,它完全按照我的要求运行,但在其他项目中却没有。我改变了springversion和jboss home属性变量但是一切都保持不变,我该怎么办?项目构建和所有,一切都工作得很好只是我不想每次在我的jboss目录中复制并且之前删除旧的战争,每个源代码需要大约20秒更改它很多

2 个答案:

答案 0 :(得分:5)

此行发现问题:

<packaging>jar</packaging>

你没有使用正确的包装,它应该是:

<packaging>war</packaging>

在此更改之后,war插件应该被调用,并且事情应该像在另一个项目中一样工作:)

答案 1 :(得分:2)

您可以将输出目录保留为默认值,并使用配置文件而不是maven jboss plugin。它有一个hard-deploy目标,可将您的工件复制到deploy目录。如果它在个人资料中,您可以在(并且仅在您想要的时候)激活它。

此外,使用antrun插件,您还可以在复制新的war文件之前将其删除(当war文件名包含版本时这很有用,但在您的情况下可能不需要)。

<profiles>
    <profile>
        <id>deploy</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>remove-old-war</id>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <tasks>
                                    <delete>
                                        <fileset dir="${jboss.ome}"
                                                 includes="*.war"/>
                                    </delete>
                                </tasks>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>jboss-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>redeploy-server</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>hard-deploy</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

然后,您可以使用

激活配置文件
mvn -Pdeploy install