在我的maven中,您想用包org.lory.ejb.commons
中的唯一编译类创建一个jar,如下所示:
因为这些类在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由其内部的包路径生成(它与所包含的已编译类不同)。实际上,如果我尝试将其导入另一个项目,则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不能为 解决
答案 0 :(得分:3)
我了解您正在尝试创建一个仅包含部分代码的jar文件(一个模块),但是您使用的是非常规方式。
在Maven中执行此操作的主要方法是创建一个父项目(带有pom
包装的maven项目);添加一个名为common
的模块,在其中放置通用代码(来自org.lory.ejb.commons
包的所有代码);并添加其他client
和server
模块,分别在其中放置客户端和服务器代码。 client
和server
模块都将依赖于common
。
顺便说一句,请注意,使用模块也更容易-例如。使用Eclipse,您可以简单地使用pom打包创建一个新的Maven项目。向其中添加Maven模块(带有jar
包装);并将代码移至正确的模块
编辑
带有包装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下更改任何内容