Java 如何在maven包上编译类路径资源?

Java 如何在maven包上编译类路径资源?,java,eclipse,maven,jar,pom.xml,Java,Eclipse,Maven,Jar,Pom.xml,我将一个项目作为依赖项包含在另一个项目中。在mavenpackage上,包含的依赖项没有编译为jar,而是创建了一个空文件夹 项目: main-test (packaging: jar) main-webservice (packaging: war) 主要的webservice项目包括带有pom的jar 主测试pom.xml: <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache

我将一个项目作为依赖项包含在另一个项目中。在maven
package
上,包含的依赖项没有编译为jar,而是创建了一个空文件夹

项目:

main-test (packaging: jar)
main-webservice (packaging: war)
主要的webservice项目包括带有pom的jar

主测试pom.xml:

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.main</groupId>
    <artifactId>test</artifactId>
    <packaging>jar</packaging>
</project>

4.0.0
德梅因
测试
罐子
main webservice 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>de.main</groupId>
    <artifactId>ws</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>de.main</groupId>
        <artifactId>test</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>
<build><plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
            </plugin>
</plugins></build>
</project>

4.0.0
德梅因
ws
1
战争
德梅因
测试
1
org.apache.maven.plugins
maven战争插件
2.4
测试项目的依赖关系在webservice项目内部得到解决,因此pom似乎是正确的

无论如何,如果我运行“mvn包”,则
main webservices
的资源将编译为目标,但
libs
文件夹包含另一个名为
main-test-1.0.jar
的文件夹。但它是一个文件夹,不是一个打包的罐子

这里可能出了什么问题?如何将项目打包为jar而不是文件夹?

想法:

  • 检查存储库中是否存在jar

  • 检查eclipse中的jar项目是否未在Java构建路径中的war项目中引用

  • 不使用eclipse mvn插件即可完成:

    mvn eclipse:clean(对于两个项目)

    mvn eclipse:eclipse(适用于两个项目)

    mvn清洁安装(适用于两个项目)


包含的依赖项未编译为jar

Maven从不编译依赖项。它只是将它们保持原样,要么将它们放在类路径上,要么将它们复制到战争中。但它永远不会改变工件

这也意味着依赖关系必须在本地repo中(在
~/.m2/repository/
下面的某个地方),否则Maven会不高兴(=因错误而失败)


注意:Maven没有很大的内存。它总是只能在他小小的大脑中保存一个模块。在Eclipse中,您可以按原样将另一个项目添加到构建路径中,但Maven不能这样做。要使Maven正常工作,必须在本地repo中安装所有依赖项。

我以前从未见过这种情况。您可能需要发布更多的POM,问题显然不在您提供的小片段中。请参阅上面的我的更新。我注意到:当我在我的主要Web服务项目的eclipse中查看maven libraries视图时,依赖项
main test
也不是作为一个jar包含的,而是作为一个文件夹包含的。基本上,它的Eclipse告诉您它是由工作区中的另一个项目管理的依赖项。“包含的依赖项不作为jar编译”->Maven从不编译依赖项。它只是将它们保持原样,要么将它们放在类路径上,要么将它们复制到战争中。但是它永远不会改变工件。Hm文件不存在于maven
.m2
存储库中,因为我想避免直接
安装
jar来存储。我只想让maven找到并构建它,因为我的工作区中打开了两个项目。那么,当我在我的webservice项目上运行“mvn包”时,是否有机会告诉maven自动
将引用的开放式工作区项目安装到repo中?