将依赖项从本地迁移到Maven

时间:2016-02-18 08:16:54

标签: java eclipse maven

我有一个Java代码,我在其中使用Maven和本地系统添加了JAR。现在,当我在不同的系统上运行它时,缺少本地JAR。如何将所有内容添加到Maven并删除本地类路径?

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.memeanalytics</groupId>
<artifactId>kafka-consumer-storm</artifactId>
<packaging>jar</packaging>
<version>1.1.0</version>
<name>HibernateExample</name>
<url>http://maven.apache.org</url>


<repositories>

    <repository>
        <id>github-releases</id>
        <url>http://oss.sonatype.org/content/repositories/github-releases/</url>
    </repository>

    <repository>
        <id>clojars</id>
        <url>http://clojars.org/repo</url>
    </repository>

    <repository>
        <id>cloudera-repo-releases</id>
        <url>https://repository.cloudera.com/artifactory/repo/</url>
    </repository>

</repositories>

<dependencies>

    <!-- <dependency> <groupId>net.wurstmeister.storm</groupId> <artifactId>storm-kafka-0.8-plus</artifactId> 
        <version>0.4.0</version> </dependency> -->

    <dependency>
        <groupId>org.xerial.snappy</groupId>
        <artifactId>snappy-java</artifactId>
        <version>1.1.1.3</version> <!-- was 1.1.0-M3 -->
    </dependency>

    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-kafka</artifactId>
        <version>0.9.3</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.sd.dwh.kafka.storm.Invoker</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3 个答案:

答案 0 :(得分:1)

我不知道你当地的JAR&#34;是什么意思。如果你的意思是混合使用Maven依赖项并手动将JAR添加到IDE中,那么这是一个非常糟糕的主意。您是否使用Maven。如果你使用Maven,一切都应该是Maven依赖。将来,您需要将每个手动添加的jar都由Maven管理,方法是将其添加到本地存储库中: https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html 将它添加到本地存储库后,您可以将其作为依赖项添加到pom.xml中,就像使用Maven central中的所有其他依赖项一样。

如果您与其他人或其他计算机共享该项目,则会遇到您正在讨论的问题。在团队中(或在本地网络内),您通常会运行repository manager Nexus。当有新的依赖项手动添加(并安装到本地存储库)时,通常将其部署到Nexus,它充当本地网络和Maven中心之间的代理。然后,您团队或本地网络中的每个人都可以找到这些依赖关系。

答案 1 :(得分:0)

最简单的修复尝试是:
1.记下您手动添加到类路径的所有jar /依赖项(使用IDE或其他方式)
2.使用maven中心搜索工具(http://search.maven.org/)在公共存储库中找到这些依赖项(当然是逐个)。您使用在线maven搜索找到的结果将包含这些依赖项{1}的pom片段。将它们复制并粘贴到现有的pom.xml依赖项部分。 3.删除基于IDE的类路径条目。

当然,只有当这些依赖项存在于公共存储库中时才能使用

答案 2 :(得分:0)

您可以为本地开发设置一个maven存储库管理器,例如nexus,它可以代理maven中央存储库,您可以在其中部署自己的库。当您需要在另一个环境中开发时,您可以从本地maven存储库获取依赖项。