我正在使用Netbeans来开发我的项目,我最近发现一个jar文件中的一个类覆盖了另一个同名文件,如何解决这个问题?
我有一个名为DB_Tools_Panel的项目,它具有以下结构:
src/ : DB_Tools_Panel.java
Utility/ : Tools_Lib.java
所以在src目录中有一个文件:DB_Tools_Panel.java,并且在src目录中还有一个名为Utility的目录,在Utility中有一个名为Tools_Lib.java的文件。
我将这个项目打包成一个jar文件:DB_Tools_Panel.jar
然后我创建了第二个项目Fit,它具有以下结构:
src/ : Fit.java
Utility/ : Tools_Lib.java
lib/ : DB_Tools_Panel.jar
它使用DB_Tools_Panel.jar,所以DB_Tools_Panel.jar在Fit的lib目录中,但是现在当我更改Fit / src / Utility中的Tools_Lib.java并运行它时,什么都不会发生,好像它从未改变过,现在我知道为什么,因为JVM只运行DB_Tools_Panel.jar包中的Tools_Lib.java,它不会在Fit / src / Utility中看到Tools_Lib.java,换句话说,在我将DB_Tools_Panel.jar包含到Fit项目中之后, DB_Tools_Panel.jar中的Tools_Lib.java将掩盖Fit / src / Utility中的Tools_Lib.java。
两个地方的Tools_Lib.java都是同一个文件,但Fit / src / Utility中的文件可能更高级,有时我测试DB_Tools_Panel并确保它正常工作并将其打包成jar文件,并在其他项目中使用它,Utility / Tools_Lib.java用于以后的项目并需要改进,但我不一定要总是回到DB_Tools_Panel.jar并更新其中的Tools_Lib.java。
所以我的问题是:
[1]在这种情况下,Fit项目中可能有2个不同的Tools_Lib.java文件,一个在Fit / src / Utility /中,另一个在Fit / lib / DB_Tools_Panel.jar中,不会引起冲突,我的意思是:当Fit调用Tools_Lib.java时,它将使用src / Utility /中的一个,当Fit中的某个方法调用DB_Tools_Panel时,DB_Tools_Panel的Tools_Lib.java将在DB_Tools_Panel的方法中使用。
[2]为什么DB_Tools_Panel.jar中的Tools_Lib.java掩盖了Fit / src / Utility中的Tools_Lib.java?
[3]如何使2个Tools_Lib.java不同,仍然可以更改 Fit / src / Utility并在Fit项目中使用它,就好像DB_Tools_Panel.jar中的那个不存在一样?
答案 0 :(得分:3)
答案 1 :(得分:1)
您应该使用包来更轻松地识别您的项目/文件。另外,如果可能,使用更具描述性的名称而不是重复名称。
对于您的班级名称,您不应该使用_
。它反对Code Conventions:
有了这些,你可以让你的项目看起来像这样:
src/ : com/frank/db/tools/DBToolsPanel.java
com/frank/db/tools/utility/ : ToolsLib.java
而且:
src/ : com/frank/fit/Fit.java
com/frank/fit/utility/ : ToolsLib.java
lib/ : DBToolsPanel.jar
DBToolsPanel.java
导致com.frank.db.tools.utility.ToolsLib
Fit.java
和com.frank.fit.utility.ToolsLib
{{1}} {{1}}。