我有两个基于maven的eclipse项目,一个是带有公共类的项目,另一个是使用这些项目的Java EE Web应用程序。
现在,我知道将公共项目构建为jar的方法,并将其作为依赖项添加到另一个项目中。
但是,如果我希望公共类直接包含在WAR的WEB-INF / classes中,我将如何解决呢?
并且,该机制是否可以在eclipse和运行maven命令的命令行中工作?
答案 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>