-1

免责声明: 请不要提交如何更改此架构的建议,我无法更改它。我正在从事一项新工作,试图弄清楚事情是如何工作的,使可见的架构更改不是变量,也不在本文的范围内。谢谢

BODY: 我比较陌生Maven,目前正在努力弄清楚如何为项目Eclipse构建列表Maven Dependencies。我的 Eclipse 工作区符合以下布局:

workspace
  |
  |--maven
  |    |
  |    |--pom.xml (super pom)
  |
  |--proj_1
  |    |
  |    |--pom.xml (parent->relativePath=../maven/pom.xml)
  |    |
  |    |--src
  |
  |--proj_2
  |    |
  |    |--pom.xml (parent->relativePath=../maven/pom.xml)
  |    |
  |    |--src
  ...
  |
  |--proj_n
       |
       |--pom.xml (parent->relativePath=../maven/pom.xml)
       |
       |--src

其中工作空间下的每个节点都是一个 Eclipse 项目。在查看 EclipsePackage Explorer时,(我认为)的存在pom.xml会触发创建一个Maven Dependencies以 jar 命名的库包,这些包会进入该项目的classpath.

但是,我不明白 Eclipse 如何从 pom.xml 文件的层次结构中提取必要的引用 jar 列表。例如,我看到我的 Maven 依赖项中列出了一个foobar.jar,但该项目的 pom.xml 和它引用的超级 pom 中都没有这样的条目。我需要对类路径进行一些更改,但我不能将 jars 直接从 Maven 依赖项中取出(就像我可以从常规 Eclipse 中取出一样Referenced Libraries),这让我认为它需要在 poms 的某个地方完成。

请帮助我了解 pom.xml 层次结构如何转换为引用库的 Eclipse 类路径。

4

1 回答 1

0

您不应该直接引用父文件,而应该像这样pom.xml在子文件的顶部引用它们。pom.xml请注意,此配置中的任何地方都没有相对路径。

<parent>
    <groupId>com.yourcompany</groupId>
    <artifactId>your-parent</artifactId>
    <version>your-version</version>
</parent>

您会看到很多没有在 parent和 children.jar中直接引用的文件。这是正常的,这些被称为瞬态依赖。换句话说,它们是您的依赖项的依赖项。pom.xmlpom.xml

您永远不会使用 Maven更改类路径,您只需操作<dependency/>节,Maven 就会为您构建您需要的类路径。如果您手动执行此操作,则您做错了。从其他一些陈述中,您可能还有其他一些根本错误的事情,因为您使用的一些术语,Idiomatic Maven 不能为一件事的继承提供相对路径。pom.xml但是我们无法确定,因为您实际上并没有发布您实际上是如何配置您的parent pom.xml的。

阅读maven-dependency-plugin它可以产生这个:

com.xx.xxxpreferences:jar:1.0-SNAPSHOT
+- com.xx.xxx:common:jar:1.0-SNAPSHOT:compile
|  +- org.slf4j:slf4j-jdk14:jar:1.7.5:compile
|  +- com.lowagie:itext:jar:4.2.0:compile
|  |  +- org.bouncycastle:bctsp-jdk14:jar:1.38:compile
|  |  |  +- org.bouncycastle:bcprov-jdk14:jar:1.38:compile
|  |  |  \- org.bouncycastle:bcmail-jdk14:jar:1.38:compile
|  |  +- dom4j:dom4j:jar:1.6.1:compile
|  |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
|  |  +- jfree:jfreechart:jar:1.0.12:compile
|  |  |  \- jfree:jcommon:jar:1.0.15:compile
|  |  \- org.swinglabs:pdf-renderer:jar:1.0.5:compile
|  +- com.xx.xxx:exceptions:jar:1.0-SNAPSHOT:compile
|  |  \- struts:struts:jar:1.1:compile
|  |     +- commons-beanutils:commons-beanutils:jar:1.6.1:compile
|  |     +- commons-collections:commons-collections:jar:3.1:compile
|  |     +- struts:struts-legacy:jar:1.1:compile
|  |     +- commons-digester:commons-digester:jar:1.6:compile
|  |     +- commons-fileupload:commons-fileupload:jar:1.0:compile
|  |     +- commons-lang:commons-lang:jar:2.1:compile
|  |     +- commons-logging:commons-logging:jar:1.0:compile
|  |     +- commons-validator:commons-validator:jar:1.1.4:compile
|  |     +- oro:oro:jar:2.0.7:compile
|  |     \- javax.sql:jdbc-stdext:jar:2.0:compile
|  +- javax.mail:mail:jar:1.5.0-b01:compile
|  |  \- javax.activation:activation:jar:1.1:compile
|  \- com.netcharts:pro:jar:0.1:compile
+- com.fasterxml.jackson.core:jackson-annotations:jar:2.0.1:compile
+- com.fasterxml.jackson.core:jackson-core:jar:2.2.0:compile
+- com.fasterxml.jackson.core:jackson-databind:jar:2.2.0:compile
+- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.2.1:compile
|  +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.2.1:compile
|  \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.2.1:compile
+- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:jar:2.1.3:compile
|  \- org.codehaus.woodstox:stax2-api:jar:3.1.1:compile
+- org.codehaus.woodstox:woodstox-core-asl:jar:4.1.4:compile
|  \- javax.xml.stream:stax-api:jar:1.0-2:compile
+- org.slf4j:slf4j-api:jar:1.7.5:compile
+- com.google.code.findbugs:jsr305:jar:2.0.1:compile
+- junit:junit:jar:4.11:test
|  \- org.hamcrest:hamcrest-core:jar:1.3:test
\- com.google.guava:guava:jar:14.0:compile

然后带着一些具体的问题回来,以获得具体的答案。

于 2013-09-11T16:17:41.207 回答