如何通過ant腳本找到包含特定類的jar的名稱?Ant腳本查找給定類名的jar文件?
回答
嘗試jarscan。這是一個命令行的java工具,如果你想通過ant集成它也應該很容易。
這不是真正的螞蟻。
Ant主要是一個構建工具,它的核心功能圍繞着這一點。是的,它可以用於其他功能,但仍然最好使用它的用途。在JAR文件中尋找類並不是它擅長的。
在Java中這樣做可能會更好。 Java提供了打開JAR文件並檢查內容的功能。你可以使用這些來找到你正在尋找的課程。或者,使用另一個旨在實現這一目標的工具,比如Biju提到的Jarscan。
如果你真的需要做到這一點,一種方法可能工作是遍歷所有的JAR文件,並通過每一個到available
任務作爲唯一classpath
路徑元素。您感興趣的課程將用於classname
屬性。
編輯:既然這聽起來像你現在的娛樂無螞蟻的解決方案,這裏的發現,我的類代碼的變化:
import java.net.URL;
public class ClassFinder {
public static void main(String[] args) throws ClassNotFoundException {
Class<?> c = Class.forName(args[0]);
URL url = c.getResource(c.getSimpleName() + ".class");
System.out.println("location of " + args[0] + ": " + url);
}
}
使用Java 6,您可以使用類路徑通配符(見"Understanding class path wildcards"),因此應該很容易包含JAR的目錄並查看其速度。
EDIT2:如果你想找到多個位置......
import java.io.IOException;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Enumeration;
public class ClassFinder {
public static void main(String[] args) throws IOException {
String classResourceName = args[0].replaceAll("\\.", "/") + ".class";
ClassLoader loader = ClassFinder.class.getClassLoader();
Enumeration<URL> classResources = (loader == null) ? ClassLoader.getSystemResources(classResourceName) : loader.getResources(classResourceName);
if (classResources.hasMoreElements()) {
System.out.println("Locations of " + args[0] + ":");
while (classResources.hasMoreElements()) {
URL url = classResources.nextElement();
URLConnection conn = url.openConnection();
String loc = (conn instanceof JarURLConnection) ? ((JarURLConnection)conn).getJarFile().getName() : url.toString();
System.out.println(loc);
}
} else {
System.out.println("No locations found for " + args[0]);
}
}
}
我覺得這個問題可以通過一個1線(OK,5線)C-shell腳本可以較好地解決。假設您正試圖在包含某個文件的某個目錄中查找jar文件的列表。在你的csh提示符下試試這個:
% cd directory_where_your_jar_files_reside
% set f2Search = filename_you_are_looking_for
% foreach jarFile (*.jar)
? (jar tvf $jarFile | grep $f2Search > /dev/null) || echo $jarFile
? end
如果需要的話,你可以很明顯地將輸出連接到其他文件。這是一個Unix解決方案,不知道如何在Windows上執行此操作,很抱歉。不回答Ant問題抱歉,但其他人已經回答了。希望這有助於, - M.S.
我同意rfeak這不是ANT的設計目的。話雖如此,確定如何解決丟失的類依賴關係是非常令人沮喪的......
我使用findjar網站。它索引了大部分可用的開源庫。
我們使用下面的Ant代碼來查找包含我們主類的jar。它需要Ant 1.8+。
<whichresource class="${main.class}" property="main.class.url">
<classpath>
<fileset dir="${jar.dir}" includes="*.jar" />
</classpath>
</whichresource>
<pathconvert property="jar.file">
<url url="${main.class.url}" />
<regexpmapper from="jar:file:/(.*)!.*" to="\1" />
</pathconvert>
<echo>Jar file containing main class: ${jar.file}</echo>
我希望這能回答你的問題。
Maarten
- 1. Bash腳本在給定文件夾中查找文件類型
- 2. 使用ant在jar文件中查找java版本的類文件?
- 3. Powershell腳本查找特定的文件/文件名?
- 4. ANT腳本移動指定的文件
- 5. 從ant腳本執行java類文件
- 6. 從RTC存儲庫下載jar文件的Ant或maven腳本
- 7. 將創建jar文件的ant腳本轉換爲sbt
- 8. 用於查找文件名中特定單詞的Linux腳本
- 9. 在Jar中查找文本文件
- 10. Bash腳本在大量的.jar文件中查找符號
- 11. 如何使用Ant檢查簽名的jar文件?
- 12. shell腳本查找文件具有類似名稱
- 13. 查找Jar名稱使用類名稱
- 14. 查找包含Main:Shell腳本的Jar
- 15. Ant腳本生成的Jar - 參考未找到錯誤
- 16. bash腳本查找文件
- 17. Ant jar命令只編譯擴展名爲.jar的文件
- 18. 在Ant腳本中將命令行參數傳遞給JAR
- 19. Ant腳本,調試JAR和Eclipse
- 20. Java:如何知道給定類名使用哪個jar文件?
- 21. Ant部署。 Jar無法找到主類
- 22. Ant jar找不到或加載主類
- 23. ANT jar問題。 RT。在Java/lib中找不到jar文件
- 24. 查找基本文件名
- 25. java/ant jar文件SecurityException
- 26. 通過給定用戶名和域名的腳本查找組成員身份
- 27. Ant + Ivy Jar版本
- 28. 文件腳本查找版本
- 29. Proguard with Ant:從文件夾中篩選特定的jar文件
- 30. Ant:特定文件夾結構的導出jar文件
是與.jar文件的名稱相同的類的名稱? – Grammin 2011-01-20 20:09:54
Nope ..它的不同......所有的罐子都在一個其位置已知的目錄中。我嘗試了使用shell腳本,但它花費很多時間來搜索。:( – scorpion 2011-01-20 20:13:47
很長時間來搜索?我給你一個基於shell腳本的答案,我很樂意看到一個解決方案,以更快地解決你的問題。 – 2011-01-20 23:47:14