Java 如何在maven包上编译类路径资源?
我将一个项目作为依赖项包含在另一个项目中。在mavenJava 如何在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
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中?