在我的maven中想要创建一个jar,其中包含org.lory.ejb.commons
包中唯一的编译类,如下所示:
因为这些类在ejb核心项目和客户端项目之间是通用的。我正在尝试使用maven程序集插件,其中我的程序集描述符是:
<assembly>
<id>commons</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${basedir}/target/classes/</directory>
<outputDirectory>${basedir}/target/</outputDirectory>
<includes>
<include>org/lory/ejb/commons/**</include>
</includes>
</fileSet>
</fileSets>
而我的pom.xml部分是
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptors>
<descriptor>src/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
看来jar内部的包路径生成的jar是不受尊重的(它与包含的编译类不同)。事实上,如果我尝试将其导入到其他项目中,Eclipse不允许我使用它:
哪种方式使用它?谢谢
和pom.xml
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>lory-ejb-commons</groupId>
<artifactId>lory-ejb-commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>lory-ejb-commons</name>
<modules>
<module>lory-ejb</module>
</modules>
这是另一个项目的pom.xml(从中删除了commons包)
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>lory-ejb-commons</groupId>
<artifactId>lory-ejb-commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>lory-ejb</artifactId>
<name>lory-ejb</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>lory-ejb-commons</groupId>
<artifactId>lory-ejb-commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
但它仍然无效。清理并安装两个项目后,我遇到了这个错误
[错误]无法在项目lory-ejb上执行目标:无法解析项目lory-ejb-commons的依赖项:lory-ejb:jar:0.0.1-SNAPSHOT:找不到工件lory-ejb-commons:lory-ejb -commons:jar:0.0.1-SNAPSHOT - > [帮助1]
在子项目中,我甚至无法将commons包作为jar导入,它只是将其视为目录,即使我可以在源代码中导入类,java编译器仍然说
导入org.lory.ejb.commons.OperationOutcome无法解析
我知道你正在尝试创建一个只包含代码子集的jar文件(模块) - 但你是以非常规方式进行的。
在Maven中实现这一目标的主要方法是创建一个父项目(一个带有pom
包装的maven项目);添加一个名为common
的模块,您可以在其中放置公共代码(org.lory.ejb.commons
包中的所有代码);并添加其他client
和server
模块,分别放置客户端和服务器代码。 client
和server
模块都将依赖于common
。
顺便说一句,请注意使用模块也更容易 - 例如。使用Eclipse,您只需创建一个带有pom包装的新Maven项目;添加maven模块(使用jar
packagin);并将代码移动到正确的模块
包装pom
的编辑项目在构建时不会生成jar文件。这就是为什么你有错误:找不到工件lory-ejb-commons:lory-ejb-commons:jar:0.0.1-SNAPSHOT。 (那是因为pom
项目很特殊,它不打算包含代码;因此你不应该直接使用代码)。
您应该为您的父项目命名,例如。 lory-ejb-parent
,在它下面创建另一个名为common
的模块,并将公共代码放在那里;并使lory-ejb
模块依赖于common
模块。
此外,Eclipse自动管理基于maven的项目的依赖关系,因此无需在project-> Java Build Path下更改任何内容