如何在Maven中使用自定义库?

时间:2015-03-22 03:11:38

标签: java maven minecraft

我正在开发一款使用Maven的软件。我最近和我一起工作的朋友最近添加了一个IO-Lib,它可以更容易地处理Minecaft发送的数据包:Pocket Edition Click here to see the software I'm talking about但是,由于jar不在Maven Repo上,我可以使用依赖关系办法。无论如何使用不在maven repo中的自定义库?

我的pom.xml:

<project>
    <?xml version="1.0" encoding="UTF-8"?>

    <groupId>net.trenterprises.diamondcore</groupId>
    <artifactId>DiamondCore</artifactId>
    <version>0.1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.0-rc1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.0-rc1</version>
        </dependency>

        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.11</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>net.trenterprises.diamondcore.run</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <organization>
        <name>Trenterprises</name>
    </organization>
</project>

3 个答案:

答案 0 :(得分:4)

如果自定义jar文件不在maven中心,那么下一个最好的事情是它在不同的repo中。如果是这种情况,您可以将其他存储库详细信息添加到pom.xml文件中,它将从两个存储库中提取。

第二个最好的事情是使用“mvn install:install-file”目标手动将二进制文件安装到缓存中。然后它将在缓存支持的环境中解析。如果你的构建系统存在于你的工作环境之外,那就更难了。

假设您必须在多个maven环境(不仅仅是您自己的环境)中进行此工作而且您没有私有存储库,则需要创建一个。您可以下载各种maven存储库管理系统(Artifactory等)安装它们,然后配置您的内部存储库,就像添加第二个外部存储库一样。

如果设置存储库服务器似乎令人生畏,虽然它远非一个完美的解决方案,但有一段时间你可以使用“mvn install:install-file”目标在每个本地缓存中安装该文件(但是一个拼写错误或缓存清除,它将在该缓存中混乱)

答案 1 :(得分:2)

您可能希望添加系统范围的依赖项。看看这里:

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope

它解释了导入依赖项的各种方法。并非所有都要求依赖关系存放在存储库中。

答案 2 :(得分:1)

我认为这就是lhasadad所说的,但要详细说明:我过去使用<scope>system</scope><systemPath>some/path/to.jar</systemPath>成功地将Maven指向当地的罐子。例如:

<dependency>
  <groupId>org.apache</groupId>
  <artifactId>kafka_2.8.2</artifactId>
  <version>${kafka.version}</version>
  <type>jar</type>
  <scope>system</scope>
  <systemPath>${basedir}/lib/kafka_2.8.2-${kafka.version}.jar</systemPath>
</dependency>