Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 54

103
votes
answers
27 views
+10

Best Method for Jar Extraction in Unix/Linux?

How do you extract the contents of a JAR file in (Ubuntu) Linux?

沙发
+520

有趣的事實:.jar文件實際上只是一個.zip文件

  unzip file.jar  
     
			
        
板凳
+400
jar -xvf file.jar
地板
+70

或者如果你安裝了jdk:

  jar xf file.jar  
     
			
        
4楼
+20

對於GUI查看器,請使用:

  file-roller file.jar  
     
			
        
5楼
+20

unzip -o GST_Build.jar -d - > 嘗試在LINUX中提取一個JAR文件

6楼
0

我嘗試雙擊然後提取。它奏效了!

0
votes
answers
55 views
+10

爲什麼java.lang.NoSuchMethodError出現非常特定於環境或類加載器?

0

我目前正在開發一個項目,其中包含log4j-over-slf4j.jar文件。在所有的環境中,這個罐子都在工作。但突然間我有一臺WebSphere應用程序服務器。 我們的產品在tomcat服務器上工作,突然之間,我們的應用程序無法創建任何日誌,而在另一個環境中創建它。如果我嘗試從項目中刪除該jar,那麼我可以生成日誌。爲什麼java.lang.NoSuchMethodError出現非常特定於環境或類加載器?

但我無法確定爲什麼我應該只爲特定的環境做這件事。

或者我應該怎麼做才能在服務器運行時識別類加載器信息以確定哪個類被加載或哪個方法被加載?

我的JDK版本是: 「1.7.0_71」

我的應用程序中包含這些庫:

antlr-2.7.7.jar 
aopalliance-1.0.jar 
asm-1.5.3.jar 
asm-attrs-1.5.3.jar 
axiom-api-1.2.12.jar 
axiom-impl-1.2.12.jar 
axis2-1.6.2.jar 
axis2-kernel-1.6.1.jar 
axis2-transport-http-1.6.1.jar 
axis2-transport-local-1.6.1.jar 
c3p0-0.9.2.1.jar 
cglib-2.1_3.jar 
com.ibm.jbatch-tck-spi-1.0.jar 
commons-codec-1.6.jar 
commons-collections-3.1.jar 
commons-fileupload-1.2.jar 
commons-httpclient-3.1.jar 
commons-logging-1.1.3.jar 
dom4j-1.6.1.jar 
ehcache-1.2.3.jar 
geronimo-activation_1.1_spec-1.0.2.jar 
geronimo-javamail_1.4_spec-1.6.jar 
geronimo-jta_1.1_spec-1.1.jar 
geronimo-stax-api_1.0_spec-1.0.1.jar 
geronimo-ws-metadata_2.0_spec-1.1.2.jar 
hibernate-3.2.4.ga.jar 
hibernate-annotations-3.3.0.ga.jar 
hibernate-commons-annotations-3.1.0.GA.jar 
hibernate-core-3.3.0.CR2.jar 
hibernate-ehcache-3.3.0.CR2.jar 
hibernate-entitymanager-3.3.1.ga.jar 
hibernate-jpa-2.0-api-1.0.0.Final.jar 
hibernate-validator-3.1.0.CR2.jar 
httpcore-4.0.jar 
javaetmoi-spring4-vfs2-support-1.4.0.jar 
javassist-3.18.1-GA.jar 
javassist-3.3.GA.jar 
javax.batch-api-1.0.jar 
javax.servlet-api-3.0.1.jar 
jaxen-1.1.1.jar 
jboss-common-core-2.0.4.GA.jar 
jboss-logging-3.3.0.Final.jar 
jettison-1.2.jar 
jsr311-api-1.0.jar 
jta-1.1.jar 
log4j-1.2.17.jar 
log4j-api-2.0.jar 
logkit-1.0.1.jar 
mchange-commons-java-0.2.3.4.jar 
neethi-3.0.1.jar 
oracle-ojdbc6-11.2.0.3.0.jar 
persistence-api-1.0.jar 
poi-3.9.jar 
slf4j-api-1.7.11.jar 
slf4j-simple-1.6.4.jar 
spring-aop-3.2.13.RELEASE.jar 
spring-batch-core-3.0.1.RELEASE.jar 
spring-batch-infrastructure-3.0.1.RELEASE.jar 
spring-beans-3.2.13.RELEASE.jar 
spring-context-3.2.13.RELEASE.jar 
spring-core-3.2.13.RELEASE.jar 
spring-expression-3.2.13.RELEASE.jar 
spring-jdbc-3.2.13.RELEASE.jar 
spring-orm-3.2.13.RELEASE.jar 
spring-retry-1.0.3.RELEASE.jar 
spring-tx-3.2.13.RELEASE.jar 
spring-web-4.0.3.RELEASE.jar 
stax-api-1.0.1.jar 
woden-api-1.0M9.jar 
woden-impl-commons-1.0M9.jar 
woden-impl-dom-1.0M9.jar 
wsdl4j-1.6.2.jar 
wstx-asl-3.2.9.jar 
xmlbeans-2.5.0.jar 
xmlpull-1.1.3.1.jar 
XmlSchema-1.4.7.jar 
xpp3_min-1.1.4c.jar 
xstream-1.4.7.jar 

我的Tomcat的lib目錄包含:

annotations-api.jar 
catalina-ant.jar 
catalina-ha.jar 
catalina.jar 
catalina-storeconfig.jar 
catalina-tribes.jar 
ecj-4.5.jar 
el-api.jar 
jasper-el.jar 
jasper.jar 
jsp-api.jar 
ojdbc6-11.2.0.3.jar 
servlet-api.jar 
sqljdbc4-11.1.0.7.0.jar 
tomcat-api.jar 
tomcat-coyote.jar 
tomcat-dbcp.jar 
tomcat-i18n-es.jar 
tomcat-i18n-fr.jar 
tomcat-i18n-ja.jar 
tomcat-jdbc.jar 
tomcat-jni.jar 
tomcat-juli.jar 
tomcat-util.jar 
tomcat-util-scan.jar 
tomcat-websocket.jar 
websocket-api.jar 
沙发
0
0

不能確定準確的環境,但我幾乎可以肯定你會得到一些類庫的意外版本。如果在從Tomcat切換到WebSphere(或其他方式)之後發生問題,他們可能有不同版本的與slf4相關的東西(或其中一個庫有另一個缺失的庫)。大多數情況下,java的-verbose:class選項應該可用於挖掘從何處獲得類的內容

板凳
0
0

當您的代碼使用不同於您的環境提供的代碼版本進行編譯時,會出現此類錯誤。

public class A{ 
public void a(){ 
} 
} 

//newer version of module 
public class AVariant{ 
public void a(String b){ 
} 
} 

我沒那麼熟悉WebSphere,但這裏的問題是,WebSphere使用日誌框架的舊/更新或版本,這是不兼容你編譯應用程序的版本。您需要解決此依賴性衝突。

本指南可以幫助你:當你的應用程序試圖調用一個方法在早期版本的類,這是不可用的類的較新版本的情況 https://www.slf4j.org/legacy.html

+0

感謝您的回答,我們知道NoSuchMethodError如何發生,但我的問題是爲什麼我們必須刪除該jar。 – 5A9U

地板
0
0

NoSuchMethod錯誤。基本上這可能是由於升級/降級或進入新環境時版本衝突造成的。

的深入描述在這裏。

Docker Image of Jersey Web Application

檢查應用程序庫VS服務器提供的庫不會是在這裏使用。重要的是JVM類加載器在運行時加載的庫/類。

分析哪些是通過java.class.path系統屬性加載的類https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

System.getProperty("java.class.path"); 

然後將它們與你的Tomcat版本提供的罐子進行比較。

+0

類路徑中沒有任何變化。它仍然是一樣的。我們在默認情況下在tomcat的classpath中使用了bootstrap.jar和tomcat-juli.jar。 – 5A9U

+0

你能發佈錯誤日誌嗎? –

0
votes
answers
44 views
+10

如何將jar庫添加到lib和lib/ext目錄下的Wildfly服務器?

0

我想盡量減少我的myapp.ear文件以將某些庫移動到服務器wildfly 10,但我發現的簡單方法是通過包含在standalone.xml部署中,如下面的示例。如何將jar庫添加到lib和lib/ext目錄下的Wildfly服務器?

<deployments> 
    <deployment name="mysql-connector-java-5.0.8-bin.jar" runtime-name="mysql-connector-java-5.0.8-bin.jar"> 
     <content sha1="7b9bfb6c4e4885660378a9c13330915c321f6cca"/> 
    </deployment> 
</deployments> 

,我可以使用圖書館的Maven作爲例子

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
</dependency> 

有沒有一種簡單的方法來添加和加載圖書館../lib或../lib/ext?

+0

您可以創建'靜態'模塊並依賴它們。 – ehsavoie

+0

這會怎樣?你有一個例子嗎? – Joe

+0

爲你的驅動創建一個module.xml文件: <依賴性> <模塊名稱= 「javax.api」/> <模塊名稱= 「javax.transaction.api」/> <模塊名稱= 「javax.servlet.api」 可選= 「真」/ > ehsavoie

沙发
0
0

要定義wildfly 10一個新的模塊,我們可以在其他使用jboss-cli.sh。

創建模塊依賴

../wildflly/bin$ ./jboss-cli 
[[email protected]:9990 /] module add 
--name=org.mysql 
--resources=<path-res>/mysql-connector-java-5.1.45-bin.jar 
--dependencies=javax.api,javax.transaction.api 

我用作<路徑解析度> ../standalone/lib

創建數據源驅動

[[email protected]:9990 /]/subsystem=datasources/jdbc-driver= 
mysql:add(driver-module-name=org.mysql, 
driver-name=mysql, 
driver-class-name=com.mysql.jdbc.Driver) 

創建數據庫源(例如機智h默認mysql端口)

[[email protected]:9990 /] /subsystem=datasources/data-source= 
MySQLDS:add(jndi-name=java:jboss/datasources/MySQLDS, 
driver-name=mysql, 
connection-url=jdbc:mysql://localhost:3306/schema, 
user-name=root, 
password=pass) 
板凳
0
0

您的驅動程序創建一個像他的一個module.xml文件:

<module xmlns="urn:jboss:module:1.5" name="com.mysql"> 
    <resources> 
     <resource-root path="mysql-connector-java-5.0.8-bin.jar"/> 
    </resources> 
    <dependencies> 
     <module name="javax.api"/> 
     <module name="javax.transaction.api"/> 
    </dependencies> 

執行: 。

/jboss-cli.sh -c --command="module add --module-xml=<path-to-file>/module.xml --resources=<path-to-file>/mysql-connector-java-5.0.8-bin.jar" 
0
votes
answers
29 views
+10

可執行jar無法正常啓動

0

我使用eclipse indigo創建了一個可執行的jar文件,但是當我雙擊它時沒有任何反應。但是當我將java -jar c:/dir/filename.jar寫入cmd時,它工作正常。其他罐子運行良好。我使用jdk 1.7.0_02和eclipse indigo。我怎麼能正常啓動它?可執行jar無法正常啓動

+0

你是如何創建可執行jar? – havexz 2012-01-09 05:41:53

沙发
0
1

您可以通過雙擊運行jar,只需確保Java與.jar文件相關聯。最簡單的方法是通過重新安裝JRE(通常爲您執行此操作)。

否則,你將需要修改一些您的Windows屬性(我不知道你正在運行的Windows版本),以文件指向的.jar到的javaw.exe的實例。

Here's a link到Windows 7頁面上如何做到這一點。

板凳
0
0

右鍵單擊.jar文件並轉到屬性,然後將「open with」程序設置爲「Java SE Binary」。

地板
0
0

您可以通過將.jar擴展名與命令相關聯來通過javaw.exe運行它。

"C:Program FilesJava{java version}injavaw.exe" -jar "%1" %* 
9
votes
answers
34 views
+10

How to get the path of a running JAR file?

My code runs inside a JAR file, say foo.jar, and I need to know, in the code, in which folder the running foo.jar is.

So, if foo.jar is in C:FOO, I want to get that path no matter what my current working directory is.

沙发
+20
String path = getClass().getResource("").getPath();

The path always refers to the resource within the jar file.

該路徑字符串仍然需要根據您的需要進行簡化。String path = new File(getClass()。getResource(“”)。getPath())。getParentFile()。getParent(); 文件jarDir = new File(path.substring(5)); - ZZZ 2010年11月15日21:59

當類存放在JAR文件中時,我的測試中的getResource(“”)和getResource(“。”)都失敗了; 兩個調用都返回null。 - ctrueden 12年12月4日16:50

這會拋出NullPointerException。 - user207421 2016年12月16日0:06

板凳
+20
public static String dir() throws URISyntaxException
{
    URI path=Main.class.getProtectionDomain().getCodeSource().getLocation().toURI();
    String name= Main.class.getPackage().getName()+".jar";
    String path2 = path.getRawPath();
    path2=path2.substring(1);

    if (path2.contains(".jar"))
    {
        path2=path2.replace(name, "");
    }
    return path2;}

Works good on Windows

地板
+20

I tried to get the jar running path using

String folder = MyClassName.class.getProtectionDomain().getCodeSource().getLocation().getPath();

c:app>java -jar application.jar

Running the jar application named "application.jar", on Windows in the folder "c:app", the value of the String variable "folder" was "c:appapplication.jar" and I had problems testing for path's correctness

File test = new File(folder);
if(file.isDirectory() && file.canRead()) { //always false }

So I tried to define "test" as:

String fold= new File(folder).getParentFile().getPath()
File test = new File(fold);

to get path in a right format like "c:app" instead of "c:appapplication.jar" and I noticed that it work.

4楼
+10

Something that is frustrating is that when you are developing in Eclipse MyClass.class.getProtectionDomain().getCodeSource().getLocation() returns the /bin directory which is great, but when you compile it to a jar, the path includes the /myjarname.jar part which gives you illegal file names.

To have the code work both in the ide and once it is compiled to a jar, I use the following piece of code:

URL applicationRootPathURL = getClass().getProtectionDomain().getCodeSource().getLocation();
File applicationRootPath = new File(applicationRootPathURL.getPath());
File myFile;
if(applicationRootPath.isDirectory()){
    myFile = new File(applicationRootPath, "filename");
}
else{
    myFile = new File(applicationRootPath.getParentFile(), "filename");
}
5楼
+10

Not really sure about the others but in my case it didn't work with a "Runnable jar" and i got it working by fixing codes together from phchen2 answer and another from this link :How to get the path of a running JAR file? The code:

               String path=new java.io.File(Server.class.getProtectionDomain()
                .getCodeSource()
                .getLocation()
                .getPath())
          .getAbsolutePath();
       path=path.substring(0, path.lastIndexOf("."));
       path=path+System.getProperty("java.class.path");
6楼
+10

Have tried several of the solutions up there but none yielded correct results for the (probably special) case that the runnable jar has been exported with "Packaging external libraries" in Eclipse. For some reason all solutions based on the ProtectionDomain do result in null in that case.

From combining some solutions above I managed to achieve the following working code:

String surroundingJar = null;

// gets the path to the jar file if it exists; or the "bin" directory if calling from Eclipse
String jarDir = new File(ClassLoader.getSystemClassLoader().getResource(".").getPath()).getAbsolutePath();

// gets the "bin" directory if calling from eclipse or the name of the .jar file alone (without its path)
String jarFileFromSys = System.getProperty("java.class.path").split(";")[0];

// If both are equal that means it is running from an IDE like Eclipse
if (jarFileFromSys.equals(jarDir))
{
    System.out.println("RUNNING FROM IDE!");
    // The path to the jar is the "bin" directory in that case because there is no actual .jar file.
    surroundingJar = jarDir;
}
else
{
    // Combining the path and the name of the .jar file to achieve the final result
    surroundingJar = jarDir + jarFileFromSys.substring(1);
}

System.out.println("JAR File: " + surroundingJar);
7楼
0

This method, called from code in the archive, returns the folder where the .jar file is. It should work in either Windows or Unix.


  private String getJarFolder() {
    String name = this.getClass().getName().replace('.', '/');
    String s = this.getClass().getResource("/" + name + ".class").toString();
    s = s.replace('/', File.separatorChar);
    s = s.substring(0, s.indexOf(".jar")+4);
    s = s.substring(s.lastIndexOf(':')-1);
    return s.substring(0, s.lastIndexOf(File.separatorChar)+1);
  } 

Derived from code at: Determine if running from JAR

“它應該適用於Windows或Unix。” 但在任何applet和每個應用程序中都會失敗。使用JWS啟動。 - 安德魯湯普森2011年4月14日19:36

8楼
0

Mention that it is checked only in Windows but i think it works perfect on other Operating Systems [Linux,MacOs,Solaris] :).


I had 2 .jar files in the same directory . I wanted from the one .jar file to start the other .jar file which is in the same directory.

The problem is that when you start it from the cmd the current directory is system32.


Warnings!

  • The below seems to work pretty well in all the test i have done even with folder name ;][[;'57f2g34g87-8+9-09!2#@!$%^^&() or ()%&$%^@# it works well.
  • I am using the ProcessBuilder with the below as following:

9楼
0

This code worked for me:

private static String getJarPath() throws IOException, URISyntaxException {
    File f = new File(LicensingApp.class.getProtectionDomain().().getLocation().toURI());
    String jarPath = f.getCanonicalPath().toString();
    String jarDir = jarPath.substring( 0, jarPath.lastIndexOf( File.separator ));
    return jarDir;
  }
10楼
-10

I write in Java 7, and test in Windows 7 with Oracle's runtime, and Ubuntu with the open source runtime. This works perfect for those systems:

The path for the parent directory of any running jar file (assuming the class calling this code is a direct child of the jar archive itself):

try {
    fooDir = new File(this.getClass().getClassLoader().getResource("").toURI());
} catch (URISyntaxException e) {
    //may be sloppy, but don't really need anything here
}
fooDirPath = fooDir.toString(); // converts abstract (absolute) path to a String

So, the path of foo.jar would be:

fooPath = fooDirPath + File.separator + "foo.jar";

Again, this wasn't tested on any Mac or older Windows

11楼
-10

The getProtectionDomain approach might not work sometimes e.g. when you have to find the jar for some of the core java classes (e.g in my case StringBuilder class within IBM JDK), however following works seamlessly:

public static void main(String[] args) {
    System.out.println(findSource(MyClass.class));
    // OR
    System.out.println(findSource(String.class));
}

public static String findSource(Class<?> clazz) {
    String resourceToSearch = '/' + clazz.getName().replace(".", "/") + ".class";
    java.net.URL location = clazz.getResource(resourceToSearch);
    String sourcePath = location.getPath();
    // Optional, Remove junk
    return sourcePath.replace("file:", "").replace("!" + resourceToSearch, "");
}

URL.getPath()不會按照您的想法執行操作。任何特殊字符都將進行百分比編碼。 - VGR 2016年6月13日15:39

完全錯誤:線程“main”中的異常java.lang.ClassCastException:java.lang.Class無法強制轉換為java.lang.reflect.ParameterizedType - Aubin 2013年1月3日19:51

12楼
-10

I have another way to get the String location of a class.

URL path = Thread.currentThread().getContextClassLoader().getResource("");
Path p = Paths.get(path.toURI());
String location = p.toString();

The output String will have the form of

C:UsersAdministrator
ew Workspace...

The spaces and other characters are handled, and in the form without file:/. So will be easier to use.

這裡最好的答案。為什麼每個人都想讓事情變得如此復雜?伙計們,這是簡單的數學。 - Lambart 2016年6月29日18:27

7
votes
answers
34 views
+10

OSGi and legacy libraries

I've been looking into OSGi for a while and I'm wondering about the best way to deal with "legacy" libraries (that are released as plain JARs, not as OSGi bundles).

What do you think is the best way to handle these? Modifying their manifest file and adding the minimal bundle-specific information, then repackaging them is what I do at the moment, but it seems somehow wrong to me. Should I just use manual dependency management for these JARs (I do this for those libraries which have a high probability of being used only in a certain part of my application)?

As far as they are available, I'm using bundles for Eclipse (since I'm using Equinox as OSGi platform, this works out well for those libraries that are available as bundles).

Are there any bundle-repositories besides the Eclipse-bundles that I should know of?

沙发
+50
+50

Spring is going OSGi in a big way, using Equinox as the underlying platform.

http://www.springsource.org/dmserver

Rob Harrop's blog is worth following if you're into OSGi developments.

And to answer your question, here's Spring's OSGi bundle repository:

http://www.springsource.com/repository/app/

+20

There's also Eclipse Orbit which has a number of pre-packaged bundles for Eclipse's uses. And instead of amending the bundle's manifest directly, you can create a wrapper bundle which provides the Manifest yourself, and include the Jar as is with a Bundle-ClassPath: foo.jar header. It's slightly less efficient to do it this way since at runtime, the foo.jar is extracted out (at least, on Equinox) but it might be easier for you to manage the build process with that.

The Spring repo is also a good source of open-source libraries that have been OSGi'ified.

347
votes
answers
30 views
+10

Adding a library/JAR to an Eclipse Android project

This is a two-part question about adding a third-party library (JAR) to an Android project in Eclipse.

The first part of the question is, when I try to add a third-party JAR (library) to my Android project I first get the problem of

Error parsing XML: unbound prefix

because I'm trying to use a class from that JAR (and need the prefix somehow defined). What's going on?

Second, (after fixing that--the answer is given below), my application doesn't work on Android and I discover via the debugger (LogCat) that the class I'm attempting to consume doesn't exist.

Caused by: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView...

Why, when I get no compilation or linker error in Eclipse, does it have this problem on the emulator?

These two questions are rhetorical for I'm going to answer them myself below. Other posts in this forum creep up to the problem and elsewhere there is discussion, but I feel that I can be more explicitly helpful for the next guy to come along.

up vote 315 down vote accepted favorite
沙发
+3150
+50

現在是缺少類的問題。

我是Eclipse Java EE開發人員,多年來一直習慣通過Build Path中的“User Library”機制添加第三方庫。當然,至少有3種方法可以添加第三方庫,我使用的是最優雅的方式,我認為這是最優雅的。

然而,對於Android,其Dalvik不行“JVM”無法處理普通的Java編譯類,但必須將其轉換為特殊格式。當你以我不會這樣做的方式添加庫時,就不會發生這種情況。

而是按照(廣泛使用的)指導導入第三方庫,然後使用Build Path添加它(這使Eclipse知道編譯目的)。這是一步一步:

  1. 將庫下載到主機開發系統。
  2. 在Eclipse / Android項目中創建一個新文件夾 libs
  3. 右鍵單擊 libs ,然後選擇Import - &gt; 一般 - &gt; 文件系統,然後單擊下一步,在文件系統中瀏覽以查找庫的父目錄(即:您將其下載到的目錄)。
  4. 單擊確定,然後單擊左窗格中的目錄名稱(不是複選框) ,然後在右側窗格中檢查相關的JAR。這會將庫放入您的項目中(物理上)。
  5. 右鍵單擊您的項目,選擇Build Path - &gt; 配置Build Path,然後單擊Libraries選項卡,然後單擊Add JARs ...,導航到 libs 目錄中的新JAR並添加它。(順便說一句,是您的新JAR轉換為在Android上使用的時刻。)

    注意

    如果您的lib已經包含在內,則可能不需要步驟5建立路徑。在添加之前先確保它的存在。

    你在這裡完成的工作完成了兩件事:

    1. 在Android項目中包含一個Dalvik轉換的JAR。
    2. 使Eclipse可用於Java定義,以便在開發(即編譯)項目的源代碼時查找第三方類。

拉斯,你應該開始另一個單獨的問題。這個“答案”看起來很奇怪。 - 保羅·格雷瓜爾2010年9月4日16:29

所以,我稍微重寫了部分問題。我已經抵制了做簡單事情的誘惑(你在這裡提出的建議),因為我真的認為這兩個問題都來自於試圖添加第三方圖書館,而且我認為任何有第二個問題的人都可能擁有第一個也是。謝謝。 - Russ Bateman 2010年9月4日17:24

我希望在正式的Android文檔中有更明確的內容(還沒有發現它),而其他論壇中的其他答案也是如此,但從來沒有看到過這個問題。請注意,在BlackBerry上,同樣的問題是一個巨大的噩夢,沒有人提供有關如何解決它的可靠信息 - 不知道我會在那裡做什麼。 - Russ Bateman 2010年9月4日17:26

謝謝,正是我在尋找的! - Thomas Ahle 2010年12月9日15:12

嗨@RussBateman我嘗試了你上面提到的步驟,並且成功地能夠在我的android項目中包含庫jar,因此在編譯時我的項目可以訪問庫類。但是當我運行項目時,我收到一個錯誤在我的控制台中:“轉換為Dalvik格式失敗,錯誤1”..我的項目將無法啟動! - Zeba 12年12月12日7:53

+200

確保您的第三方罐子在您的項目“libs”文件夾中,當您打包應用程序時,它們將被放入.apk中。如果不支持jar中的某些內容,您可能會在設備上看到運行時錯誤,但除此之外我已經取得了很大的成功。

是的,謝謝,我正在去寫那個答案。 - Russ Bateman 2010年9月4日16:10

它的全部經驗,我之前有同樣的問題:) - 保羅Gregoire 2010年9月4日在16:27

謝謝先生,但很難看到libs文件夾需要我們已經在Maven存儲庫或其他地方擁有的外部Jar文件的副本。 - 2013年3月27日19:40 asgs

遺憾的是,這不再自動運行,您還必須告訴eclipse將包含在包文件中。 - Neil Townsend 2013年8月27日14:02

什麼時候改變了?這是我們習以為常的巨大變化。 - 保羅·格雷瓜爾2013年8月27日14:37

+50

設置庫項目

庫項目是標準的Android項目,因此您可以像創建新應用項目一樣創建新項目。

在創建庫項目時,可以根據需要選擇任何應用程序名稱,包和設置其他字段,如圖1所示。

接下來,設置項目的屬性以指示它是一個庫project:

在Package Explorer中,右鍵單擊庫項目,然後選擇Properties。在“屬性”窗口中,選擇左側的“Android”屬性組,然後在右側找到“庫”屬性。選中“is Library”複選框,然後單擊“應用”。單擊“確定”關閉“屬性”窗口。新項目現在標記為圖書館項目。

+40

如果您使用的是ADT 22版,則需要檢查項目構建路徑中的順序和導出選項卡中的android依賴項和android私有庫

+20

首先,缺少前綴的問題。

如果您在佈局文件中使用來自第三方的內容,您可能還需要使用其前綴,例如“droidfu:”它發生在下面的XML構造中的幾個地方:

 &lt; com.github.droidfu.widgets.WebImageView android:id =“@ + id / webimage”android:layout_width =“75dip” android:layout_height =“75dip”android:background =“#CCC”droidfu:autoLoad =“true”droidfu:imageUrl =“http://www.android.com/images/opensourceprojec.gif”droidfu:progressDrawable =“.. 。“/&gt;   

這來自JAR,但你' ll還需要添加新的“xmlns:droidfu”

 &lt; LinearLayout xmlns:android =“http://schemas.android.com/apk/res/android”xmlns:droidfu = “http://github.com/droidfu/schema”...&gt;   

或者您收到未綁定的前綴錯誤。對我來說,這是未能從第三方庫的頁面複製和粘貼所有提供的示例。

+10

解析XML時出錯:未綁定前綴

資源'/ playteddy / res'不存在。

我得到了上述兩個錯誤,最後我解決了它。

右鍵單擊您的項目 - &gt; 屬性 - &gt; java構建路徑 - &gt; googleadmobadsdk(選擇並將其置於頂部),然後運行並解決問題。它解決了我的運行時錯誤。

0

將源放在yourt工作區外的文件夾中。右鍵單擊項目瀏覽器,然後選擇“導入...”

將工作區中的項目導入為Android項目。嘗試構建它,並確保它被標記為庫項目。還要確保它是使用Google API支持構建的,如果不是,您將收到編譯錯誤。

然後,右鍵單擊項目資源管理器中的主項目。選擇屬性,然後選擇左側的Android。在下面的庫部分中,單擊“添加”..

現在可以將mapview-balloons庫添加到項目中。

0

轉到eclipse中的構建路徑,然後單擊order並導出,然後檢查庫/ jar,然後單擊向上按鈕將其移動到列表頂部以首先編譯它。

但似乎源是針對Java 6的? - akarnokd 09年6月12日17:55

確實。Java 5是mac支持的後期要求。 - Stefan Kendall 09年6月12日17:57

0
votes
answers
44 views
+10

無效的文件(壞的幻數):當我執行JAR文件時,如何解決這個問題不能使用這個Java代碼?

0

IM triying運行這段代碼中使用事件執行一個jar文件,但沒有工作無效的文件(壞的幻數):當我執行JAR文件時,如何解決這個問題不能使用這個Java代碼?

我怎麼能解決

IM triying運行這段代碼中使用事件執行一個jar文件,但沒有作品

我怎麼能解決

JButton cn= new JButton("push me3"); 
    cn.setBounds(0,0,295,20); 
    f.add(cn); 
    cn.addActionListener(new ActionListener(){ 

    @Override 
    public void actionPerformed(ActionEvent e)  { 
    String title =hellopanelx40.getText(); 
    try{ 

    //All your IO Operations 

    Process proc = Runtime.getRuntime().exec("/home/example.jar"); 
    proc.waitFor(); 
    // Then retreive the process output 
    InputStream in = proc.getInputStream(); 
    InputStream err = proc.getErrorStream(); 

    byte b[]=new byte[in.available()]; 
    in.read(b,0,b.length); 
    System.out.println(new String(b)); 

    byte c[]=new byte[err.available()]; 
    err.read(c,0,c.length); 
    System.out.println(new String(c)); 

    }catch(Throwable t){ 
    t.printStackTrace(); 
     } 
    } 
    }); 

請幫我

+0

我已經低估了這個問題,因爲你在這裏發佈了代碼而沒有指定它有什麼問題。我們期望看到你期望的代碼做什麼,爲什麼你期望它做到這一點,它實際上在做什麼(在適當的情況下有完整的錯誤消息和堆棧跟蹤)以及它爲什麼是錯誤的。請[編輯]您的問題以包含此信息,然後我會考慮收回我的downvote。 –

+0

嗨對不起,我的問題是,當我在終端工程中執行一個jar文件;但是當我執行使用java不起作用。 – user8903285

+0

請[編輯]你的問題,包括確切的命令,沒有確切的命令,以及你得到的確切錯誤(完整的堆棧跟蹤)。 –

沙发
0
0

在執行exec(),嘗試改變「JAV一個-jar /home/example.jar「

+0

是的工作我沒有看到這個錯誤 – user8903285

+0

非常謝謝你。 – user8903285

0
votes
answers
45 views
+10

Java - 命令行中的jar與自己的參數和自己的參數

-2

我無法找到簡單的解決方案來解決我在Java中的問題。我必須使用帶參數的命令行來運行JAR文件。Java - 命令行中的jar與自己的參數和自己的參數

我知道如何做到這一點像的下方,它的正常工作:

Java的罐子filename.jar參數1參數2等 例如:Java的罐子file.jar 50 10

但是,我應該怎麼做,我希望使用一些參數? 例如: java -jar文件-width 50 -height 10

這可能嗎?

[編輯] 我無法使用外部庫。

任何類似的答案對初學者來說都不是那麼容易,其中一些對我來說不起作用。我不是那麼愚蠢的先打開票,我一直在尋找答案兩天。但是,如果您仍然認爲這是重複的,請刪除此主題中的所有帖子:/。

+0

有庫,幫助您與此有關。 – Koekje

+0

什麼庫? – mehow

沙发
0
2

您可以使用Apache Common CLI

// create Options object 
Options options = new Options(); 
// add t option 
options.addOption("t", false, "display current time"); 
CommandLineParser parser = new DefaultParser(); 
CommandLine cmd = parser.parse(options, args); 
if(cmd.hasOption("t")) { 
    // print the date and time 
} else { 
    // print the date 
} 
+0

要使用它,我必須添加這個庫,有沒有更簡單的方法來做到這一點? – mehow

+0

如果您不想添加庫,則可以編寫自己的解析算法。正如你所說,你已經能夠在之前使用程序參數:「我知道如何做到這一點,並且它工作正常:java -jar filename.jar argument1 argument2 etc」對於你的新需求argument1 =「-width」, argument2 =「50」等。爲避免使用第三方庫,您可以編寫自己的解析來計算如何關聯名稱和值,但是爲什麼在已爲您免費提供的情況下重新創建邏輯? –

0
votes
answers
29 views
+10

如何進入IntelliJ中JUnit插件的源代碼?

0

當我在IntelliJ(2017.2 Community Edition)的調試模式下運行我的測試時,源代碼僅適用於某些代碼。如何進入IntelliJ中JUnit插件的源代碼?

特別是,當我遍歷程序包com.intellij.junit4中的代碼時,調試器會在堆棧視圖中顯示方法名稱和行號,但代碼不會出現在編輯器中。

沙发
0
0

您需要將包含源代碼的jar添加到項目的類路徑中。該jar位於相對於安裝IntelliJ的文件夾的路徑plugins/junit/lib/junit-rt.jar

轉到「項目結構」>「庫」>「+」>「Java」並添加Jar的路徑。請參閱this answer