我正在尝试将旧的非maven java NetBeans项目转换为maven项目。现有项目有36个图书馆。
我做了什么
结果
新的maven项目现在有一些旧的罐子,旧的没有,可能它们被添加,因为它们是我添加的那些的依赖。
我的问题
编辑:
感谢@SubOptimal,我能够检查图表,但这是我得到的:
左边是用所有库打开的旧项目,右边是新打开的maven转换项目的图表。现在您可以看到库是相同的" axis2-kernel-1.6.1.jar"。在左侧,旧项目没有geronimo-ws-metadata_2.0_spec,它显示为axis2库的依赖项。
现在我的问题是一样的,旧项目是如何工作的,这是一个可选的依赖吗?
答案 0 :(得分:1)
新的依赖关系可能存在,因为旧的非maven项目和新的maven项目中的库版本不同。
假设非maven项目在版本3.8中使用了JUnit。
<强>的pom.xml 强>
<?xml version="1.0" encoding="UTF-8"?>
<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>sub.optimal</groupId>
<artifactId>foo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
在这个例子中,你只有JUnit作为依赖
mvn dependency:tree
输出
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ suboptimal ---
[INFO] com.example:suboptimal:jar:0.0.1-SNAPSHOT
[INFO] \- junit:junit:jar:3.8:test
如果您现在在maven项目中使用版本4.12(而不是之前的3.8),您将看到以下依赖项(在更改pom.xml
中的版本号后)
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
输出
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ suboptimal ---
[INFO] com.example:suboptimal:jar:0.0.1-SNAPSHOT
[INFO] \- junit:junit:jar:4.12:test
[INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test
对于显示的依赖项junit:junit:jar:4.12:test
,test
表示它不是运行时依赖项。需要运行提供的测试。
在Netbeans中,您现在将两者视为测试依赖项
还有另一种方法可以直接在Netbeans中显示依赖项。当您在pom.xml
上打开Graph
并且仅在Show Graph
上打开后第一次打开时,axis2 kernel
。
你得到一个视觉依赖树
编辑:您还没有说过您的旧项目使用的内容。但是找到下面<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-kernel</artifactId>
<version>1.6.1</version>
</dependency>
的一个例子。
当您的新项目添加以下依赖项
时mvn dependency:tree
列出了compile time
的依赖关系,揭示了以下[INFO] \- org.apache.axis2:axis2-kernel:jar:1.6.1:compile
[INFO] +- org.apache.ws.commons.axiom:axiom-api:jar:1.2.12:compile
[INFO] | +- org.apache.geronimo.specs:geronimo-activation_1.1_spec:jar:1.0.2:compile
[INFO] | +- org.apache.geronimo.specs:geronimo-javamail_1.4_spec:jar:1.6:compile
[INFO] | +- jaxen:jaxen:jar:1.1.1:compile
[INFO] | \- org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:jar:1.0.1:compile
[INFO] +- org.apache.ws.commons.axiom:axiom-impl:jar:1.2.12:compile
[INFO] | \- org.codehaus.woodstox:wstx-asl:jar:3.2.9:compile
[INFO] +- org.apache.geronimo.specs:geronimo-ws-metadata_2.0_spec:jar:1.1.2:compile
[INFO] +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1:compile
[INFO] +- javax.servlet:servlet-api:jar:2.3:compile
[INFO] +- commons-httpclient:commons-httpclient:jar:3.1:compile
[INFO] | \- commons-codec:commons-codec:jar:1.2:compile
[INFO] +- commons-fileupload:commons-fileupload:jar:1.2:compile
[INFO] +- wsdl4j:wsdl4j:jar:1.6.2:compile
[INFO] +- org.apache.ws.commons.schema:XmlSchema:jar:1.4.7:compile
[INFO] +- org.apache.neethi:neethi:jar:3.0.1:compile
[INFO] +- org.apache.woden:woden-api:jar:1.0M9:compile
[INFO] +- org.apache.woden:woden-impl-dom:jar:1.0M9:compile
[INFO] | \- org.apache.woden:woden-impl-commons:jar:1.0M9:compile
[INFO] +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] \- javax.ws.rs:jsr311-api:jar:1.0:compile
个依赖关系(运行时也需要,请参阅Maven dependency scopes)
axis2.war
那么为什么它现在看起来你的旧项目不需要它们?假设您的旧项目使用jar -tf axis2.war | grep geronimo-ws-metadata
文件(从axis2-1.6.1-war.zip中提取)。嵌入依赖项。
WEB-INF/lib/geronimo-ws-metadata-LICENSE.txt
WEB-INF/lib/geronimo-ws-metadata_2.0_spec-1.1.2.jar
输出
{{1}}