如何在 Maven 中使用自定义库?
How to use a custom library in Maven?
我正在开发一个使用 Maven 的软件。与我一起工作的朋友最近添加了一个 IO-Lib,它可以更轻松地处理 Minecaft 发送的数据包:袖珍版 Click here to see the software I'm talking about 但是,由于 jar 不在 Maven Repo 上,我可以正常使用依赖项方法。无论如何要使用不在 Maven 存储库中的自定义库?
我的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>
您可能想要添加系统范围的依赖项。看看这里:
它解释了导入依赖项的各种方法。并非所有都要求将依赖项保存在存储库中。
如果自定义 jar 文件不在 maven central 中,那么最好的办法是将它放在不同的 repo 中。如果是这种情况,您可以将其他存储库详细信息添加到 pom.xml 文件,它将从两个存储库中提取。
第二个最好的方法是使用 "mvn install:install-file" 目标手动将二进制文件安装到缓存中。然后它将在您的缓存支持的环境中解析。如果您的构建系统位于您的工作环境之外,它就会变得有点困难。
假设您必须在多个 Maven 环境(不仅仅是您自己的环境)中完成这项工作,并且您没有私有存储库,那么您需要创建一个。您可以下载各种 maven 存储库管理系统(Artifactory 等)并安装它们,然后像添加第二个外部存储库一样配置您的内部存储库。
如果设置存储库服务器让您望而生畏,虽然它远非完美的解决方案,但您可以暂时使用 "mvn install:install-file" 目标在每个本地缓存中安装文件(但一个拼写错误或缓存清除,它会在该缓存中搞砸)
我认为这就是 lhasadad 所说的,但要详细说明:我过去曾使用 <scope>system</scope>
和 <systemPath>some/path/to.jar</systemPath>
成功地将 Maven 指向本地 jar。例如:
<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>
我正在开发一个使用 Maven 的软件。与我一起工作的朋友最近添加了一个 IO-Lib,它可以更轻松地处理 Minecaft 发送的数据包:袖珍版 Click here to see the software I'm talking about 但是,由于 jar 不在 Maven Repo 上,我可以正常使用依赖项方法。无论如何要使用不在 Maven 存储库中的自定义库?
我的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>
您可能想要添加系统范围的依赖项。看看这里:
它解释了导入依赖项的各种方法。并非所有都要求将依赖项保存在存储库中。
如果自定义 jar 文件不在 maven central 中,那么最好的办法是将它放在不同的 repo 中。如果是这种情况,您可以将其他存储库详细信息添加到 pom.xml 文件,它将从两个存储库中提取。
第二个最好的方法是使用 "mvn install:install-file" 目标手动将二进制文件安装到缓存中。然后它将在您的缓存支持的环境中解析。如果您的构建系统位于您的工作环境之外,它就会变得有点困难。
假设您必须在多个 Maven 环境(不仅仅是您自己的环境)中完成这项工作,并且您没有私有存储库,那么您需要创建一个。您可以下载各种 maven 存储库管理系统(Artifactory 等)并安装它们,然后像添加第二个外部存储库一样配置您的内部存储库。
如果设置存储库服务器让您望而生畏,虽然它远非完美的解决方案,但您可以暂时使用 "mvn install:install-file" 目标在每个本地缓存中安装文件(但一个拼写错误或缓存清除,它会在该缓存中搞砸)
我认为这就是 lhasadad 所说的,但要详细说明:我过去曾使用 <scope>system</scope>
和 <systemPath>some/path/to.jar</systemPath>
成功地将 Maven 指向本地 jar。例如:
<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>