簡體   English   中英

Maven:從一個大項目的包中創建一個jar

[英]Maven: create a jar from a package of a larger project

在我的maven中想創建一個jar,其中包含org.lory.ejb.commons包中唯一編譯的類,如下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包中的所有代碼); 並添加其他clientserver模塊,分別放置客戶端和服務器代碼。 clientserver模塊都具有對common的依賴性。


順便說一句,請注意使用模塊也更容易 - 例如。 使用Eclipse,您只需創建一個帶有pom包裝的新Maven項目; 添加maven模塊(帶jar packagin); 並將代碼移動到正確的模塊


帶有打包pom EDIT項目在構建時不會生成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下更改任何內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM