我想将我的项目打包在一个可执行的JAR中进行分发.
如何将所有依赖JAR的Maven项目打包到我的输出JAR中?
在实验/快速和肮脏的模拟开发阶段,Maven2让我发疯.
我有一个pom.xml文件定义了我想要使用的web-app框架的依赖项,我可以从该文件快速生成启动项目.但是,有时我想链接到尚未pom.xml定义文件的第三方库,所以不是pom.xml手动创建第三方库的文件并安装它,并将依赖项添加到我的pom.xml,我只是想告诉Maven:"除了我定义的依赖项,还要包含任何罐子/lib."
看起来这应该很简单,但如果是这样,我就会遗漏一些东西.
任何关于如何做到这一点的指针都非常感谢.除此之外,如果有一种简单的方法将maven指向一个/lib目录并轻松创建一个pom.xml所有封闭的jar映射到单个依赖项,然后我可以一次命名/安装和链接就足够了.
我理解运行时和编译时之间的区别以及如何区分这两者,但我没有看到需要区分编译时和运行时依赖.
我正在窒息的是:程序如何在编译期间不依赖运行时依赖的东西?如果我的Java应用程序使用log4j,那么它需要log4j.jar文件才能编译(我的代码集成并调用log4j内部的成员方法)以及运行时(我的代码完全无法控制log4j中的代码后发生的事情) .jar跑了).
我正在阅读依赖解析工具,如Ivy和Maven,这些工具清楚地区分了这两种类型的依赖关系.我只是不明白它的必要性.
任何人都可以给出一个简单的,"国王的英语"式的解释,最好有一个实际的例子,即使像我这样的可怜的人也能理解?
我正在使用Java Maven程序而且我不知道要输入什么<mainClass>.我已经根据众多 stackoverflow问题尝试了各种各样的东西,但他们没有解决错误.
每次说:
Maven Error: Could not find or load main class ...
Run Code Online (Sandbox Code Playgroud)
我在里面写了这个pom.xml(减去???)
<build>
...
<plugins>
...
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass> ??? </mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
Run Code Online (Sandbox Code Playgroud)
我该如何解决这些错误?
我在过去几天的空闲时间里一直在研究Maven,但似乎无法弄清楚如何组织项目以便使用JOGL库.我最好喜欢以下内容:
我认为我的问题的一部分是我不完全理解JOGL的使用,在运行代码时放置本机库的位置等等.我需要回到基础并编写一个JOGL hello世界,从中编译它命令行并从命令行运行它,以确切了解它对本机库的目录放置所需的内容; 实际上,我现在可能会这样做.
在第1项中,我发现了一些特定于操作系统的功能; 可以基于系统的属性(包括操作系统)激活Maven配置文件.那么我就可以激活一个Windows配置文件,该配置文件具有Windows特定的JOGL库的依赖性,对于Linux也是如此,并且都具有64位的改变自我.(激活官方文档/非官方文档.)
我尝试创建一个基于JOGL jar文件的Maven存储库,然后添加JOGL jar文件项目作为我项目的依赖项; 依赖项已下载,但未使用.我不知道jar文件在哪里或如何使用它,解压缩等等.这是我使用的命令.
简而言之:JOGL由四个.jar文件和一些本机库组成.如何将这些文件集成到我的Maven项目中,以便我可以使用Maven编写JOGL应用程序来处理我的构建过程?此外,我如何根据操作系统使用不同的文件集,因为Windows,Linux和Mac之间的本机库甚至.jar文件当然不同.
是否有可能实际构建一个包含java代码的maven项目,并且可以共享二进制文件?
问题:我正在尝试构建的项目需要大约3-4个小时,并且需要高互联网带宽.我试图检查在其他几台机器中重新使用这个构建项目的可能性.
我之前使用过涉及makefile的c ++项目,这非常简单.我是Java/eclipse的新手,需要帮助才能弄清楚这是否真的有可能.
PS:我确实试图找到现有的解决方案; 他们不是明星前锋,或者他们说不能这样做
我们有一个Hadoop集群,我们在其上存储使用Kryo(序列化框架)序列化为字节的数据.我们用来做这个的Kryo版本已从官方版本2.21中分离出来,将我们自己的补丁应用于我们使用Kryo遇到的问题.当前的Kryo 2.22版也修复了这些问题,但使用了不同的解决方案.因此,我们不能只改变我们使用的Kryo版本,因为这意味着我们将无法再读取已存储在Hadoop集群中的数据.为了解决这个问题,我们想要运行一个Hadoop作业
问题是在一个Java程序中使用同一个类的两个不同版本并不是一件容易的事情(更确切地说,在Hadoop作业的mapper类中).
如何在一个Hadoop作业中使用同一序列化框架的两个不同版本反序列化和序列化对象?
我们想到的第一种方法是使用Maven Shade插件的重定位功能重命名我们自己的Kryo分支中的包,并使用不同的工件ID释放它,这样我们就可以依赖转换作业项目中的两个工件.然后,我们将实例化旧版本和新版本的一个Kryo对象,并使用旧版本进行反序列化,并使用新版本再次序列化对象.
问题
我们不在Hadoop作业中明确使用Kryo,而是通过我们自己的库的多个层访问它.对于这些库中的每一个,都有必要
为了使事情更加混乱,我们还使用其他第三方库提供的Kryo序列化程序,我们必须做同样的事情.
我们提出的第二种方法是在包含转换作业的Maven项目中完全不依赖于Kryo,而是从每个版本的JAR加载所需的类,该版本存储在Hadoop的分布式缓存中.然后序列化对象看起来像这样:
public byte[] serialize(Object foo, JarClassLoader cl) {
final Class<?> kryoClass = cl.loadClass("com.esotericsoftware.kryo.Kryo");
Object k = kryoClass.getConstructor().newInstance();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
final Class<?> outputClass = cl.loadClass("com.esotericsoftware.kryo.io.Output");
Object output = outputClass.getConstructor(OutputStream.class).newInstance(baos);
Method writeObject = kryoClass.getMethod("writeObject", outputClass, Object.class);
writeObject.invoke(k, output, foo);
outputClass.getMethod("close").invoke(output);
baos.close();
byte[] bytes = baos.toByteArray();
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试在RESTlet 文档上运行第一个服务器教程,但即使我将jar添加到我的类路径中,我也会收到错误.我添加了org.restlet.jar和org.restlet.ext.*
服务器的代码是:
package test;
import org.restlet.Server;
import org.restlet.data.Protocol;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;
public class Test extends ServerResource {
public static void main(String[] args) throws Exception {
// Create the HTTP server and listen on port 8182
new Server(Protocol.HTTP, 8182, Test.class).start();
}
@Get
public String toString() {
return "hello, world";
}
}
Run Code Online (Sandbox Code Playgroud)
而我得到的错误是:
11/01/2011 1:22:08 PM org.restlet.engine.Engine registerHelper
INFO: Unable to register the helper org.restlet.ext.httpclient.HttpClientHelper
java.lang.NoClassDefFoundError: org/apache/http/conn/scheme/SocketFactory
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.getConstructor(Class.java:1657)
at org.restlet.engine.Engine.registerHelper(Engine.java:716)
at …Run Code Online (Sandbox Code Playgroud) 可能重复:
在Maven的jar中包含依赖项
我是maven的初学者,我想使用maven在其中构建一个包含依赖关系jar的jar.但是,我不能这样做.请帮助我.
我对 Maven 有疑问。我写了一个java代码,它在我的想法中运行。然后我使用 mvn package 来构建一个 jar。仍然没有问题。但由于某些原因,我不明白当我尝试执行 maven 创建的 jar 时出现此错误:
\n\n Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger\n at infra.Main.main(Main.java:53)\nCaused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger\n at java.net.URLClassLoader$1.run(URLClassLoader.java:366)\n at java.net.URLClassLoader$1.run(URLClassLoader.java:355)\n at java.security.AccessController.doPrivileged(Native Method)\n at java.net.URLClassLoader.findClass(URLClassLoader.java:354)\n at java.lang.ClassLoader.loadClass(ClassLoader.java:425)\n at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)\n at java.lang.ClassLoader.loadClass(ClassLoader.java:358)\nRun Code Online (Sandbox Code Playgroud)\n\n有人可以帮助像我这样的新手吗?
\n\n下面是java代码的开头:
\n\npackage infra;\n\nimport org.apache.log4j.Logger;\nimport org.json.simple.JSONArray;\nimport org.json.simple.JSONObject;\nimport org.json.simple.parser.JSONParser;\n\nimport javax.net.ssl.HttpsURLConnection;\nimport javax.net.ssl.SSLContext;\nimport javax.net.ssl.TrustManager;\nimport javax.net.ssl.X509TrustManager;\nimport java.io.*;\nimport java.net.InetSocketAddress;\nimport java.net.Proxy;\nimport java.net.URL;\nimport java.security.GeneralSecurityException;\nimport java.security.cert.X509Certificate;\nimport java.util.ArrayList;\nimport java.util.Iterator;\nimport java.util.Scanner;\n\npublic class Main {\n\n private static String companyName = "lolilol";\n\n private static String baseUrl = "https://" + companyName + …Run Code Online (Sandbox Code Playgroud) java ×9
maven ×5
maven-2 ×4
jar ×2
compile-time ×1
eclipse ×1
hadoop ×1
jogl ×1
kryo ×1
manifest ×1
maven-plugin ×1
restlet ×1
restlet-2.0 ×1
runtime ×1