我有两个Java项目:Child和Parent with Child取决于Parent。两个项目的项目布局如下所示:
下面列出了父项目和子项目的
.class路径:
父:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry excluding="src/" kind="src" path=""/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>
儿童:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/ParentProject"/>
<classpathentry kind="output" path="bin"/>
</classpath>
如上面的classpathentry所示,Child对父级具有依赖性。
我使用Eclipse Integration for Apache Maven plugin (IAM)将这些Java项目转换为Maven项目。下面列出了相应的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>org.parentco</groupId>
<artifactId>ParentProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
儿童:
<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>org.childco</groupId>
<artifactId>ChildProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
如您所见,子pom.xml与Parent工件无关。
我在两个项目中使用“干净安装”目标运行Maven Build,从Parent开始,我看到工件被部署到我的本地存储库。太棒了....但等等.... ...如果在输出控制台中指示,Child's pom不会成功列出对Parent而Child项目构建的依赖项。
[DEBUG] (f) packaging = jar
[DEBUG] (f) pomFile = C:\Users\nji\workspace\ChildProject\pom.xml
[DEBUG] (f) updateReleaseInfo = false
[DEBUG] -- end configuration --
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for C:\Users\nji\.m2\repository
[INFO] Installing C:\Users\nji\workspace\ChildProject\target\ChildProject-0.0.1-SNAPSHOT.jar to C:\Users\nji\.m2\repository\org\childco\ChildProject\0.0.1-SNAPSHOT\ChildProject-0.0.1-SNAPSHOT.jar
[INFO] Installing C:\Users\nji\workspace\ChildProject\pom.xml to C:\Users\nji\.m2\repository\org\childco\ChildProject\0.0.1-SNAPSHOT\ChildProject-0.0.1-SNAPSHOT.pom
[DEBUG] Installing org.childco:ChildProject:0.0.1-SNAPSHOT/maven-metadata.xml to C:\Users\nji\.m2\repository\org\childco\ChildProject\0.0.1-SNAPSHOT\maven-metadata-local.xml
[DEBUG] Installing org.childco:ChildProject/maven-metadata.xml to C:\Users\nji\.m2\repository\org\childco\ChildProject\maven-metadata-local.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.809s
[INFO] Finished at: Thu Jul 19 17:05:08 EDT 2012
[INFO] Final Memory: 15M/217M
[INFO] ------------------------------------------------------------------------
那么,即使在.classpath中将classpathentry删除为Parent后,Maven如何在没有pom.xml中的显式条目的情况下将其删除?
这是项目被粉化后的.classpaths:
父:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
儿童:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
作为最后的手段,它是否只是静静地查看我的本地存储库? 此外,如果我打开代码编辑器来编辑Child中依赖于Parent的类,我会得到分辨率错误,如果我将这个依赖项添加到子代的pom中,这可能会被修复。这不是IAM应该做的吗?
答案 0 :(得分:0)
Maven不会为您明确地将依赖项写入pom.xml。但是,一旦你在任何一个pom文件(父或子)中列出了依赖关系,那么maven应该能够在类路径中拥有所有依赖关系,从而能够部署所有依赖关系。
Maven只构建一次classpath变量,其中列出了所有依赖项。因此您无需多次指定它。