在我的 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里面的包路径生成的不被尊重(跟编译出来的类不一样)。事实上,如果我尝试将它导入到其他项目中,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>
但是还是不行。清理并安装这两个项目后,我遇到了这个错误
[ERROR] Failed to execute goal on project lory-ejb: Could not resolve dependencies for project lory-ejb-commons:lory-ejb:jar:0.0.1-SNAPSHOT: Could not find artifact lory-ejb-commons:lory-ejb-commons:jar:0.0.1-SNAPSHOT -> [Help 1]
在子项目中,我什至无法将 commons 包作为 jar 导入,它只是将其视为一个目录,即使我可以在源代码中导入类,java 编译器仍然说
The import org.lory.ejb.commons.OperationOutcome cannot be resolved
最佳答案
我知道您正在尝试创建一个仅包含代码子集的 jar 文件(模块)- 但您是以一种非常规的方式进行的。
在Maven中主要的做法是创建一个父项目(用pom
打包的maven项目);添加一个名为 common
的模块,您可以在其中放置通用代码(所有代码都来自 org.lory.ejb.commons
包);并在分别放置客户端和服务器代码的位置添加其他 client
和 server
模块。 client
和 server
模块都将依赖于 common
。
顺便说一句,请注意使用模块也更容易 - 例如。使用 Eclipse,您可以简单地使用 pom 打包创建一个新的 Maven 项目;向其中添加 Maven 模块(使用 jar
packagin);并将代码移动到正确的模块
编辑
打包 pom
的项目在构建时不会生成 jar 文件。这就是您出现错误的原因:Could not find artifact lory-ejb-commons:lory-ejb-commons: jar :0.0.1-SNAPSHOT 。 (那是因为 pom
项目是特殊的,它不打算包含代码;所以你不应该直接在其中包含代码)。
您应该命名您的父项目,例如。 lory-ejb-parent
,在其下新建一个名为common
的模块,将常用代码放在那里;并让 lory-ejb
模块依赖于 common
模块。
此外,Eclipse 会自动管理基于 maven 的项目之间的依赖关系,因此无需在项目->Java 构建路径下更改任何内容
关于java - Maven:从一个较大项目的包中创建一个 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54845738/