我创建了一个我想用作外部库的java应用程序。所以我创建一个jar文件并将其导入到另一个项目中。 当我使用我的图书馆时,我打电话
notif.addMachineStat(ip,"Harvester");
声明为
public void addMachineStat(String ip,String computerTitle) throws InterruptedException, SigarException {
Resources rs=new Resources(new Sigar());
addMachineStat(ip,computerTitle,Double.toString(rs.getAllCpus()),Double.toString(rs.getMemory()),rs.getNetwork(),Double.toString(rs.getFreeHddPerc()));
}
问题似乎是从第二行(addMachineStat(....)
)抛出的SigarException。由于某种原因,SigarException类(import org.hyperic.sigar.SigarException;
)不会从jar文件传递到新项目。我是否还必须在其他项目中导入它?没有办法从jar中获取它而不需要用户导入它吗?
有趣的是,如果我在第二个项目上使用Maven(我的库项目首先使用Maven),它似乎工作正常。
答案 0 :(得分:0)
是的,您必须导入您使用的代码和库依赖的所有jar,除非您使用maven或gradle等构建工具。
Maven具有Transitive Dependencies功能,可以完成所有工作
传递依赖是Maven 2.0中的一项新功能。这使您可以避免需要发现和指定您自己的依赖项所需的库,并自动包含它们。
通过从指定的远程存储库读取依赖项的项目文件,可以简化此功能。通常,这些项目的所有依赖项都在项目中使用,项目从其父项或其依赖项继承的任何依赖项都是如此,等等
这就是为什么它工作正常。
所以你有几种选择(按降序排列):