相关疑难解决方法(0)

如何使用Maven创建具有依赖关系的可执行JAR?

我想将我的项目打包在一个可执行的JAR中进行分发.

如何将所有依赖JAR的Maven项目打包到我的输出JAR中?

java build-automation build-process maven-2 executable-jar

2276
推荐指数
28
解决办法
123万
查看次数

我可以在没有安装的情况下将jar添加到maven 2 build classpath吗?

在实验/快速和肮脏的模拟开发阶段,Maven2让我发疯.

我有一个pom.xml文件定义了我想要使用的web-app框架的依赖项,我可以从该文件快速生成启动项目.但是,有时我想链接到尚未pom.xml定义文件的第三方库,所以不是pom.xml手动创建第三方库的文件并安装它,并将依赖项添加到我的pom.xml,我只是想告诉Maven:"除了我定义的依赖项,还要包含任何罐子/lib."

看起来这应该很简单,但如果是这样,我就会遗漏一些东西.

任何关于如何做到这一点的指针都非常感谢.除此之外,如果有一种简单的方法将maven指向一个/lib目录并轻松创建一个pom.xml所有封闭的jar映射到单个依赖项,然后我可以一次命名/安装和链接就足够了.

java maven-2

686
推荐指数
14
解决办法
38万
查看次数

程序可以在编译期间依赖于库而不是运行时吗?

我理解运行时和编译时之间的区别以及如何区分这两者,但我没有看到需要区分编译时和运行时依赖.

我正在窒息的是:程序如何在编译期间不依赖运行时依赖的东西?如果我的Java应用程序使用log4j,那么它需要log4j.jar文件才能编译(我的代码集成并调用log4j内部的成员方法)以及运行时(我的代码完全无法控制log4j中的代码后发生的事情) .jar跑了).

我正在阅读依赖解析工具,如Ivy和Maven,这些工具清楚地区分了这两种类型的依赖关系.我只是不明白它的必要性.

任何人都可以给出一个简单的,"国王的英语"式的解释,最好有一个实际的例子,即使像我这样的可怜的人也能理解?

java build-process runtime compile-time

106
推荐指数
5
解决办法
5万
查看次数

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)

我该如何解决这些错误?

java maven-2 program-entry-point jar manifest

31
推荐指数
6
解决办法
8万
查看次数

Maven和JOGL库?

我在过去几天的空闲时间里一直在研究Maven,但似乎无法弄清楚如何组织项目以便使用JOGL库.我最好喜欢以下内容:

  1. 如有必要,从此处自动下载特定于操作系统的JOGL zip文件(包含4个jar文件和一些本机库文件(.so/.dll)); 或依赖于Maven项目,该项目是其中一个文件的包装.
  2. 适当地解压缩该zip文件,以便:
    1. jar文件被添加到类路径中并根据需要进行部署
    2. 本机库文件被添加到最终的jar文件中(这会使它们自动使用,还是需要更多参与?)

我认为我的问题的一部分是我不完全理解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 build-process maven-2 jogl maven

28
推荐指数
4
解决办法
1万
查看次数

是否有可能只使用eclipse和共享构建一个java项目?

是否有可能实际构建一个包含java代码的maven项目,并且可以共享二进制文件?

问题:我正在尝试构建的项目需要大约3-4个小时,并且需要高互联网带宽.我试图检查在其他几台机器中重新使用这个构建项目的可能性.

我之前使用过涉及makefile的c ++项目,这非常简单.我是Java/eclipse的新手,需要帮助才能弄清楚这是否真的有可能.

PS:我确实试图找到现有的解决方案; 他们不是明星前锋,或者他们说不能这样做

java eclipse maven

16
推荐指数
2
解决办法
4712
查看次数

处理序列化框架的不兼容版本更改

问题描述

我们有一个Hadoop集群,我们在其上存储使用Kryo(序列化框架)序列化为字节的数据.我们用来做这个的Kryo版本已从官方版本2.21中分离出来,将我们自己的补丁应用于我们使用Kryo遇到的问题.当前的Kryo 2.22版也修复了这些问题,但使用了不同的解决方案.因此,我们不能只改变我们使用的Kryo版本,因为这意味着我们将无法再读取已存储在Hadoop集群中的数据.为了解决这个问题,我们想要运行一个Hadoop作业

  1. 读取存储的数据
  2. 反序列化使用旧版Kryo存储的数据
  3. 使用新版本的Kryo序列化已还原的对象
  4. 将新的序列化表示写回我们的数据存储

问题是在一个Java程序中使用同一个类的两个不同版本并不是一件容易的事情(更确切地说,在Hadoop作业的mapper类中).

问题简而言之

如何在一个Hadoop作业中使用同一序列化框架的两个不同版本反序列化和序列化对象?

相关事实概述

  • 我们将数据存储在Hadoop CDH4集群上,使用Kryo版本2.21.2-ourpatchbranch进行序列化
  • 我们希望将数据与Kryo 2.22版本序列化,这与我们的版本不兼容
  • 我们使用Apache Maven构建我们的Hadoop作业JAR

可能的(也是不可能的)方法

(1)重命名包

我们想到的第一种方法是使用Maven Shade插件重定位功能重命名我们自己的Kryo分支中的包,并使用不同的工件ID释放它,这样我们就可以依赖转换作业项目中的两个工件.然后,我们将实例化旧版本和新版本的一个Kryo对象,并使用旧版本进行反序列化,并使用新版本再次序列化对象.

问题
我们不在Hadoop作业中明确使用Kryo,而是通过我们自己的库的多个层访问它.对于这些库中的每一个,都有必要

  1. 重命名涉及包和
  2. 使用不同的组或工件ID创建发布

为了使事情更加混乱,我们还使用其他第三方库提供的Kryo序列化程序,我们必须做同样的事情.


(2)使用多个类加载器

我们提出的第二种方法是在包含转换作业的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)

java serialization hadoop maven kryo

14
推荐指数
1
解决办法
3509
查看次数

运行RESTlet教程,我收到java.lang.NoClassDefFoundError

我正在尝试在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)

restlet restlet-2.0

7
推荐指数
1
解决办法
1万
查看次数

如何使用maven制作罐子罐子

可能重复:
在Maven的jar中包含依赖项

我是maven的初学者,我想使用maven在其中构建一个包含依赖关系jar的jar.但是,我不能这样做.请帮助我.

java maven-plugin maven

6
推荐指数
1
解决办法
4881
查看次数

ClassNotFoundException:org.apache.log4j.Logger

我对 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)\n
Run Code Online (Sandbox Code Playgroud)\n\n

有人可以帮助像我这样的新手吗?

\n\n

下面是java代码的开头:

\n\n
package 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 jar maven

6
推荐指数
1
解决办法
2万
查看次数