将非maven项目转换为maven

时间:2016-11-25 11:52:57

标签: java maven netbeans

我正在尝试将旧的非maven java NetBeans项目转换为maven项目。现有项目有36个图书馆。

我做了什么

  1. 我将库文件夹内容输出到一个文件,并获得了所有jar的列表。
  2. 我在maven repo中搜索了jar,并在pom中添加了特定版本作为依赖
  3. 结果

    新的maven项目现在有一些旧的罐子,旧的没有,可能它们被添加,因为它们是我添加的那些的依赖。

    我的问题

    1. 如果在"依赖关系"中添加了额外的罐子。部分是 我添加的罐子需要,旧项目是如何运行的? 即没有包括那些罐子?
    2. 我认为旧项目中的一些罐子是其他罐子的依赖品。我想出了当我添加一个罐子时它又添加了另一个罐子,我将要添加它。那么我该如何找出哪个罐子呢 依赖于哪一个,所以我没有明确指出我的 POM?或者我可以按顺序添加它们。
    3. 编辑:

      感谢@SubOptimal,我能够检查图表,但这是我得到的:

      enter image description here

      左边是用所有库打开的旧项目,右边是新打开的maven转换项目的图表。现在您可以看到库是相同的" axis2-kernel-1.6.1.jar"。在左侧,旧项目没有geronimo-ws-metadata_2.0_spec,它显示为axis2库的依赖项。

      现在我的问题是一样的,旧项目是如何工作的,这是一个可选的依赖吗?

1 个答案:

答案 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:testtest表示它不是运行时依赖项。需要运行提供的测试。

在Netbeans中,您现在将两者视为测试依赖项

enter image description here

还有另一种方法可以直接在Netbeans中显示依赖项。当您在pom.xml上打开Graph并且仅在Show Graph上打开后第一次打开时,axis2 kernel

show dependency graph

你得到一个视觉依赖树

dependency tree

编辑:您还没有说过您的旧项目使用的内容。但是找到下面<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}}