无法包含项目工件:com.test.mmm.jar:1.0;它没有关联的文件或目录

问题描述 投票:0回答:4

我对 Maven 很迷茫,我似乎找不到解决我的问题的方法。当我尝试生成包含项目所有依赖项的 jar 文件以在另一台计算机上执行它时,我在执行时发现此警告

sudo mvn clean compile assembly:single
:

[WARNING] Cannot include project artifact: com.test:mmm:jar:1.0; it doesn't have an associated file or directory.

另外,当我尝试使用

java -jar target/test.jar
执行 .jar 时,会出现此错误:

Error: Unable to access jarfile target/test.jar

这是我的

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>com.test</groupId>
<artifactId>mmm</artifactId>
<version>1.0</version>
<packaging>jar</packaging>

<name>mmm</name>
<url>http://maven.apache.org</url>
<properties>
    <nd4j.backend>nd4j-cuda-8.0-platform</nd4j.backend>
</properties>

<dependencies>
    <dependency>
        <groupId>org.jblas</groupId>
        <artifactId>jblas</artifactId>
        <version>1.2.4</version>
    </dependency>
    <dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-native-platform</artifactId>
        <version>0.8.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.deeplearning4j</groupId>
        <artifactId>deeplearning4j-core</artifactId>
        <version>0.8.0</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.test.mmm.Main</mainClass>
                    </manifest>
                </archive>
                <finalName>test</finalName>
                <descriptorRefs>jar-with-dependencies</descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>

主类位于

src/
我尝试了许多堆栈溢出的解决方案,但没有成功,有人可以帮助我吗?

谢谢!

maven pom.xml
4个回答
15
投票

首先使用

mvn package
构建模块类,然后使用
assembly:single

mvn package assembly:single


3
投票

根据您在问题中包含的警告:

[WARNING] Cannot include project artifact: Amjar:amjar:pom:0.2; it doesn't have an associated
.
我猜您的
pom.xml
中的包装已设置为 pom。

如果您的模块只是打包一组依赖项或资源文件,那么这很好,但是,如果您还希望 Maven 创建一个包含模块中的类的 jar,您将需要将打包设置为 jar。


0
投票

确保您生产的产品与

<finalName>
匹配 即

<groupId>com.rocket</groupId>
<artifactId>myapp</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>myapp</name>

生成 myapp-1.0.jar 并在这里提供相同的

<finalName>myapp-1.0</finalName>

然后运行然后执行:

mvn package assembly:single

0
投票

万一它可以帮助像我一样最终来到这里的其他人:

我刚刚也收到了关于

[WARNING] Cannot include project artifact:
的同样警告。它遵循 maven- assembly-plugin 只是拒绝绑定到
mvn package
执行阶段,所以我开始尝试使用
mvn assembly:single
“手动”运行它。事实证明,您必须在同一个
package
命令行中包含
asssembly:single
mvn
,如下所示:

mvn package assembly:single

如果您先运行

mvn package
,然后运行
mvn assembly:single
,则程序集插件将找不到要包含的常规 jar,尽管它位于目标文件夹中。程序集插件的
mvn -X
输出甚至明确表示它是我的目标文件夹中的 jar,它在组装带有依赖项的 jar 时使用,但如果它是由之前的 mvn 运行创建的,则它将找不到它。我闻起来有马车的味道,花了我一个多小时才弄清楚。

© www.soinside.com 2019 - 2024. All rights reserved.