当我使用 Eclipse 将我的 scala 代码打包到一个 jar 中时,我无法运行所述 jar 文件。我有:
object Hello extends App{
println("Hello World!")
}
Run Code Online (Sandbox Code Playgroud)
和:
public class Runner {
public static void main(String[] args) {
Hello.main(args);
}
}
Run Code Online (Sandbox Code Playgroud)
我使用 eclipse 将其打包到一个名为 Hello.jar 的可运行 jar 中。java -jar Hello.jar 然后给出:
Exception in thread "main" java.lang.NoClassDefFoundError: scala/App
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at Hello.main(Hello.scala)
at Runner.main(Runner.java:4)
Caused by: java.lang.ClassNotFoundException: scala.App
at java.net.URLClassLoader$1.run(URLClassLoader.java:217) …Run Code Online (Sandbox Code Playgroud) 我的 Maven 项目foo.web的源文件src/main在src/test. 当然,测试类使用“主”类。现在我想在运行时在另一个项目中使用测试类,所以我按照这些关于如何创建测试 jar 的说明进行操作。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这非常有效,web-SNAPSHOT-tests.jar创建了一个 jar ,我可以将它包含在我的其他项目中。
<dependency>
<groupId>foo</groupId>
<artifactId>web</artifactId>
<version>SNAPSHOT</version>
<type>test-jar</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但似乎对 的依赖web-SNAPSHOT没有正确设置,因为在运行时我收到foo.web. 所以我添加了另一个依赖项:
<dependency>
<groupId>foo</groupId>
<artifactId>web</artifactId>
<version>SNAPSHOT</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这没有任何改变。有谁知道这里有什么问题?
我正在尝试更新 Web 应用程序以使用 DBCP。事情在本地运行良好(Windows 安装上的典型 Tomcat)。但是,在 DEV 服务器(EC2 LINUX AMI;Tomcat 即服务)上,我得到以下信息
Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
Run Code Online (Sandbox Code Playgroud)
我已将范围缩小(我认为)到/lib最初没有tomcat-jdbc.ja.
我已经添加了这个 jar,并使用以下命令重新启动了 Tomcat 实例......
sudo service tomcat7 restart
Run Code Online (Sandbox Code Playgroud)
但是,我仍然得到相同的 ClassNotFoundException。如何让 Tomcat 服务识别tomcat-dbcp.jar?
编辑 - 这是运行后的堆栈跟踪 sudo service tomcat7 start
Jan 20, 2014 5:30:35 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with JAR file [/usr/share/java/tomcat7/log4j.jar], exists: [false], canRead: [false]
Jan 20, 2014 5:30:35 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with JAR file [/usr/share/java/tomcat7/log4j.jar], exists: [false], …Run Code Online (Sandbox Code Playgroud) 当我想从http://groovy-lang.org/download.html下载 groovy 时,我得到了“二进制版本”。这意味着我有一个带有lib和bin和embeddable文件夹的目录结构。在bin文件夹中有一个groovyshell 脚本,让我可以执行我自己的 groovy 源文件。此groovyshell 脚本使用lib目录中的 jars 。但是,我希望它使用embeddable目录中groovy-all-jar 中的 jars 。原因是,我不希望jar在我的类路径中的目录中的所有 jars,因为我需要使用不同的版本。
如何groovy使用 groovy-all-jar制作shell 脚本?
我正在尝试从基本程序创建一个 jar。
我有以下 build.gradle
apply plugin: 'groovy'
version = '1.0'
repositories {
mavenCentral();
}
dependencies
{
compile files (fileTree(dir: 'lib', include: ['*.jar']),
fileTree(dir: 'lib/DocxDep', include: ['*.jar']))
}
task buildLabServicesJar(type: Jar) {
from files(sourceSets.main.output.classesDir)
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
configurations.runtime.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Implementation-Title': 'Lab Services',
'Implementation-Version': version,
'Main-Class': 'org.xxx.clarity.ClarityServices'
}
}
Run Code Online (Sandbox Code Playgroud)问题是当我运行和/或检查 jar 文件时,我的 src/** sclasses 不包括在内!(所有依赖都是完美的)
这里有什么问题?
更新
当我添加: from files(fileTree(dir: …
我做解密和加密RSA,我用Cipher.getInstance("RSA/NONE/PKCS1Padding");它,我补充说Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());和compile 'org.bouncycastle:bcprov-jdk16:1.45'到 gradle-file。所以这个项目在 Intellij Idea 中运行和工作,
但是如果我生成 .jar 文件并运行它,我有:
java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/PKCS1Padding
at javax.crypto.Cipher.getInstance(Cipher.java:540)
Run Code Online (Sandbox Code Playgroud)
(由 gradle 的 ShadowJar 任务生成的 .jar)。
为什么我在 Intellij Idea 中的项目 - 工作!在 .jar 文件中 - 不起作用?
在 Eclipse 中,我有两个项目:
archangel.core - 一个 Maven 项目
ArchangelWEB - 一个动态 Web 项目(为 Tomcat 构建)。
首先, archangel.core 拥有所有基本代码并使用 Maven 来解决依赖关系。第二个是在核心项目之上的 Web 添加。这只有特定于演示/视图的代码。我想把它们分开,因为我将来可能有其他项目会依赖核心,我不希望核心项目有 Web 库依赖。
现在,在 ArchangelWEB 的构建路径中,我有 archangel.core 项目,并且在其部署程序集中也有 archangel.core。这使我可以在 ArchangelWEB 中引用来自 archangel.core 的代码,而不会出现任何构建或运行时问题。
archangel.core 的依赖项之一是 apache-commons-lang。在 archangel.core 中,我可以引用像ExceptionUtils. 但是,我无法从 ArchangelWEB 自动引用这个 jar 依赖项。如果我尝试import从 ArchangelWEB 中的 apache-commons-lang 上课,它不知道我在说什么。
将 Maven 项目中的依赖项 jars 导入/引用到另一个项目(我的动态 Web 项目)中的最佳方法是什么,该项目使用 Maven 项目作为依赖项?
说properties运行JAR最佳的人在执行中使用的文件属于其中是否正确META-INF?这个概念是正好与标准的目录结构指定的Maven。
假设需要这种结构,如何properties从中加载文件META-INF?
thufir@doge:~/NetBeansProjects/json_parser$
thufir@doge:~/NetBeansProjects/json_parser$ java -jar build/libs/json_parser-all.jarAug 18, 2017 6:44:24 AM net.bounceme.doge.json.Main main
INFO: starting
Aug 18, 2017 6:44:24 AM net.bounceme.doge.json.Main run
INFO: actually
Aug 18, 2017 6:44:24 AM net.bounceme.doge.json.PropertiesReader tryGetProps
INFO: properties
Aug 18, 2017 6:44:24 AM net.bounceme.doge.json.PropertiesReader getProps
INFO: properties
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:434)
at java.util.Properties.load0(Properties.java:353)
at java.util.Properties.load(Properties.java:341)
at net.bounceme.doge.json.PropertiesReader.getProps(PropertiesReader.java:26)
at net.bounceme.doge.json.PropertiesReader.tryGetProps(PropertiesReader.java:16)
at net.bounceme.doge.json.Main.run(Main.java:18)
at net.bounceme.doge.json.Main.main(Main.java:12)
thufir@doge:~/NetBeansProjects/json_parser$
thufir@doge:~/NetBeansProjects/json_parser$ jar tf build/libs/json_parser-all.jarMETA-INF/ …Run Code Online (Sandbox Code Playgroud) 假设我有两个班机场和飞机:
public class Airport
{
public static void main(String args[])
{
Airplane a1 = new Airplane();
}
}
public class Airplane
{
int seats;
public Airplane()
{
seats = 10;
}
}
Run Code Online (Sandbox Code Playgroud)
我想将这些类放在单独的JAR文件中,以便将来可以相互独立地开发它们,以防出现任何问题.由于Airport调用Airplane我必须Airplane在Airport源文件中导入.我想在项目中导入它们,我将用它来调用这些类.但即使我在项目中导入它们,仍然存在解决问题.
更新:你能举一个例子.classpath来完成这个调用层次结构吗?我只是将JAR添加到主项目的.classpath中,但Airport抱怨它无法找到方法Airplane.
我有一个包含5个文件的zip文件。其中四个文件很小(几KB),但是一个文件大于4GB。我知道JDK-4681995,它从Java 7开始向Java添加了大文件支持(64位zip支持)。我在Windows 8.1上使用64位Java 8:
C:\Users\user\Desktop>java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
Run Code Online (Sandbox Code Playgroud)
压缩文件大小如下:
07/07/2019 10:18 AM 503,966,751 snapshot-20190707.zip
Run Code Online (Sandbox Code Playgroud)
压缩文件的内容为:
07/07/2019 09:53 AM 67 database.sha1
07/07/2019 09:51 AM 4,508,840,068 database.sql
07/07/2019 09:53 AM 74 database_schema.sha1
07/07/2019 09:51 AM 36,386 database_schema.sql
07/07/2019 09:51 AM 45,280 backup.log
Run Code Online (Sandbox Code Playgroud)
如果我尝试提取4GB文件,则会遇到一个异常,该异常看上去与64位zip文件的Java 7异常完全相同:
C:\Users\user\Desktop>jar xvf snapshot-20190707.zip database.sql
java.util.zip.ZipException: invalid CEN header (bad signature)
at java.util.zip.ZipFile.open(Native Method)
at …Run Code Online (Sandbox Code Playgroud)