使用maven和eclipse将常见类打包到WAR中

时间:2011-07-14 12:24:38

标签: java java-ee-6 maven-3

我有两个基于maven的eclipse项目,一个是带有公共类的项目,另一个是使用这些项目的Java EE Web应用程序。

现在,我知道将公共项目构建为jar的方法,并将其作为依赖项添加到另一个项目中。

但是,如果我希望公共类直接包含在WAR的WEB-INF / classes中,我将如何解决呢?

并且,该机制是否可以在eclipse和运行maven命令的命令行中工作?

2 个答案:

答案 0 :(得分:0)

您可以使用Maven dependency plugin将包含公共类的.jar工件解压缩到目标文件夹。您还需要使原始依赖项具有provided范围,因此这些类不包含在classes文件夹和libs文件夹中的{{1}}文件夹中你的战争。

答案 1 :(得分:0)

正确的方法是拥有两个Maven项目。通过将您的库中的包装声明为“jar”并将webapp声明为“war”maven将使用正确的插件来构建您所描述的应用程序。您的场景相当普遍,除了我将要提供给您的信息之外,Maven文档中还提供了大量有关此信息的信息。

您的库jar应该使用类似于此的pom构建:

<?xml version="1.0" encoding="UTF-8"?>
<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.myproject.mypackage</groupId>
    <artifactId>my-lib</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>${project.artifactId}</name>
    <packaging>jar</packaging>

您的网络应用程序应该使用与此类似的pom构建:

<?xml version="1.0" encoding="UTF-8"?>
<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.myproject.mypackage</groupId>
    <artifactId>my-war</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>${project.artifactId}</name>

    <dependencies>
        <dependency>
            <groupId>com.myproject.mypackage</groupId>
            <artifactId>my-lib</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

当您构建webapp时,maven会自动将您的库Jar包含在您的web-inf / lib目录中。永远不要手动将文件放在这个目录中,让Maven为你做繁重的工作。

编辑:问题是如何在构建过程中解压缩jar,这对于众多原因和不良做法来说是一个非常糟糕的主意。持久性类属于EJB,而不属于WEB-INF / classes。这样做也会让你超出标准的Java EE支持......不过,这里的答案是:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
        <execution>
            <id>unpack</id>
            <phase>package</phase>
            <goals>
                <goal>unpack-dependencies</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>com.myproject.mypackage</groupId>
                        <artifactId>my-lib</artifactId>
                        <version>1.0.0-SNAPSHOT</version>
                        <overWrite>true</overWrite>
                        <outputDirectory>WEB-INF/classes</outputDirectory>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>