相关疑难解决方法(0)

无法执行jar文件:"没有主要清单属性"

我已经安装了一个应用程序,当我尝试运行它时(它是一个可执行的jar)没有任何反应.当我从命令行运行它时:

java -jar"app.jar"

我收到以下消息:

"app.jar"中没有主要的清单属性

通常,如果我自己创建了程序,我会在清单文件中添加一个主类属性.但在这种情况下,由于文件来自应用程序,我不能这样做.我也尝试提取jar以查看是否可以找到主类,但是有许多类,并且它们中没有一个在其名称中包含"main"一词.必须有办法解决这个问题,因为程序在其他系统上运行正常.

java program-entry-point jar manifest

875
推荐指数
21
解决办法
125万
查看次数

如何使用Maven将所有必需的JAR文件放在最终JAR文件中的库文件夹中?

我在我的独立应用程序中使用Maven,并且我想将我的JAR文件中的所有依赖项打包到库文件夹中,如下面的答案中所述:

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

我希望我的最终JAR文件有一个库文件夹,其中包含作为JAR文件的依赖项,而不是maven-shade-plugin将依赖项放在.m2文件夹中的Maven层次结构等文件夹形式的内容.

好吧,实际上当前的配置做了我想要的,但是我在运行应用程序时加载JAR文件时遇到了问题.我无法加载课程.

这是我的配置:

<plugins>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>false</overWriteSnapshots>
                    <overWriteIfNewer>true</overWriteIfNewer>
                </configuration>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <classpathPrefix>lib/</classpathPrefix>
                    <mainClass>com.myapp.MainClass</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>install</id>
                <phase>install</phase>
                <goals>
                    <goal>sources</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <configuration>
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>

</plugins>
Run Code Online (Sandbox Code Playgroud)

该项目从Eclipse运行良好,JAR文件根据我的需要放在我最终的JAR文件中的库文件夹中,但是当从目标文件夹运行最终的JAR文件时,我总是得到ClassNotFoundException:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
Caused …
Run Code Online (Sandbox Code Playgroud)

java build-process jar classloader maven

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

如何使用Maven pom将jar文件仅下载到特定目录?

有没有办法将pom.xml文件中的依赖项下载到java中的指定文件夹?我能够从java运行maven命令,我得到了下载消息,但我不知道maven在哪里存储这些库?如何将这些依赖项下载到特定文件夹?

java maven

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

Maven依赖项在WEB-INF/lib中不可见

我有这个奇怪的问题使我的项目Maven为基础.我在Eclipse中创建了一个新的Maven项目并启用了Dynamic Web方面.但是在运行时现在它会抛出ClassNotFoundException因为Maven依赖项没有复制到WEB-INF/lib目录.我甚至尝试在POM中添加copy-dependencies部分,但它没有帮助.

有人在这里似乎已经解决了这个正确的方式,但我猜他忘了提解决方案::(

java eclipse tomcat web-inf maven

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

ClassNotFoundException启动Tomcat时的DispatcherServlet(Maven依赖项未复制到wtpwebapps)

我曾经遇到过这个问题几次而且只是偶然发现了一个(半)可靠的解决方案,所以我想在这里发布它以防万一它可以帮助其他人,或者万一我忘了它,还要问是否有人知道根本原因是什么以及我的修复工作原因.

问题 - 我有一个spring 3 webapp,我想在Eclipse中使用Run on Server选项在Tomcat 7服务器上运行.对于一些项目,这只是起作用,但有些项目似乎处于破坏状态,每次服务器启动时,我都会找到一个未找到的类:org.springframework.web.servlet.DispatcherServlet.

经过一番调查,我发现,该项目的Maven依赖没有被复制到WEB-INF/lib${PROJECT_LOCATION}/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/

在最终注意到项目在"问题"面板中发出警告之前,我尝试了很多事情:

Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER 
will not be exported or published. Runtime ClassNotFoundExceptions may result.
Run Code Online (Sandbox Code Playgroud)

也许我应该早点注意到这一点.

无论如何,选择这个并执行"快速修复"可以解决问题,我可以愉快地运行我的项目.快速解决方法是:"将关联的原始类路径条目标记为发布/导出依赖项".

麻烦的是,虽然这有效,但我不知道这意味着什么.完成后,我的项目配置中看不到任何明显的变化.我很想知道实际问题是什么,以及我是否可以避免它再次发生.我还想知道是否有一些我本可以完成的事情(除了执行快速修复之外)可以修复它,因为我觉得我几乎尝试了其他一切.

谢谢你的帮助.

java eclipse tomcat maven classnotfoundexception

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

在Maven中查看依赖关系树?

我想确保我的Maven项目中没有包含重复的库.我从几个不同的存储库中提取了很多依赖项,包括main,Spring的repo和JBoss的存储库.如何查看依赖关系图,以便确保我不依赖于单个库的多个版本?

如果我包含类似的东西org.springframework:spring-core:3.0.1.RELEASE 并且 org.springframework:org.springframework.spring-core:3.0.5.RELEASE实际上显示为不同的依赖关系,听起来很奇怪,那将是一种无聊,因为Spring的存储库很奇怪地命名.我该怎么做才能确保我没有重复的依赖项?

maven

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

将基于Maven的依赖项的传递依赖项收集到非Maven项目的类路径中

我正在使用一个使用Maven编译和测试的库.
我能够毫无问题地编译库.在编译时,似乎它下载了库的所有依赖项.

现在,我正在尝试在我的项目中使用该库.当我编译库时,我发现target在库文件夹中创建了一个名为的文件夹,在该文件夹中,还有一个名为的文件夹classes.我将classes文件夹添加到了我的类路径中.但是,每当我尝试在我的项目中使用不使用Maven的库时,它就说它无法找到该库的依赖项.

如何将所有库的依赖项添加到类路径中?
我是否需要手动下载所有库的依赖项并将它们添加到类路径中?
有什么方法可以让Maven为我这样做吗?
我需要做什么才能在项目中使用库?

我的项目位于与库完全不同的目录中.现在,我的项目似乎能够正确加载库文件,但不是库依赖项.

java classpath maven

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

如何将maven托管依赖项复制到war\web-inf\lib中,以便在Eclipse中以调试模式运行我的GWT 2.0应用程序?

我正在将现有项目从GWT 1.5.2更新为GWT 2.0.0.我们使用maven 2来管理我们的依赖项,并在Eclipse 3.5中完成所有开发.

因为我们使用maven来管理我们的依赖项,所以我没有像warT指定的那样在war\web-inf\lib目录中拥有所有这些jar.相反,它们位于maven存储库中,就像maven喜欢它们一样.我已经设置了项目,以便maven可以在开发或Web模式下成功构建和启动,并且应用程序可以正常运行.

问题是当我从Eclipse启动时,我得到一个java.lang.NoClassDefFoundError.如果我在启动之前手动将我的依赖项复制到war\web-inf\lib中,一切运行正常,但这并不适合长期解决方案.首先,如果我将所有这些罐子检查到我们的版本控制中,那将破坏我们从maven获得的大部分价值.像maven一样恼人,抛弃它不是答案.其次,让开发人员在每次调试时手动复制它们都是荒谬的.

那么我可以让Eclipse在启动之前将依赖项复制到war\web-inf\lib中吗?有没有我想念的替代解决方案?

谢谢,

托尼

java eclipse gwt maven-2

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

使用Maven只是为了获取一些库jar

我们在构建过程中使用ANT,并且没有计划在不久的将来更改它.

是否可以使用Maven来获取常见的Open Source jar文件(例如Log4J,SWT,JFace)并将它们放在我们项目的正确位置,这样我们就不必将它们存储在我们的版本控制中 - 最好不要创建主目录中的典型Maven-cache?

java ant maven-2 maven

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

mvn包加载其他库作为Eclipse

如果我在Eclipse中运行我的项目一切都很好.但当我这样做时:

mvn clean 
mvn package
Run Code Online (Sandbox Code Playgroud)

然后开始我的项目然后它不工作.我发现了这个区别:

日食:

INFO  org.eclipse.jetty.server.Server:doStart:327 ~ jetty-9.2.13.v20150730
Run Code Online (Sandbox Code Playgroud)

mvn包:

INFO  org.eclipse.jetty.server.Server:doStart:327 ~ jetty-9.2.z-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

为什么?我能做什么,mvn package装载相同的码头版本9.2.13?

更新:

我发现了一些额外的差异:

在Eclipse中编译(WebApplicationInitializer):

org.eclipse.jetty.server.Server:doStart:327 ~ jetty-9.2.13.v20150730
org.eclipse.jetty.server.handler.ContextHandler$Context:log:2052 ~ No Spring WebApplicationInitializer types detected on classpath
Run Code Online (Sandbox Code Playgroud)

使用mvn package(ServletContainerInitializers)进行编译:

org.eclipse.jetty.server.Server:doStart:327 ~ jetty-9.2.z-SNAPSHOT
org.eclipse.jetty.annotations.AnnotationConfiguration:configure:456 ~ ServletContainerInitializers: detected. Class hierarchy: empty
Run Code Online (Sandbox Code Playgroud)

为什么mvn不使用WebApplication?

pom.xml中:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.myPro.test</groupId>
    <artifactId>AllInOneBoiler</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>AllInOneBoiler</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <log4j.version>2.7</log4j.version>
        <spring.version>4.3.3.RELEASE</spring.version>
        <camel.version>2.18.3</camel.version>
        <activemq.version>5.14.5</activemq.version>
        <jolokia.version>1.3.5</jolokia.version>
        <jetty.version>9.2.13.v20150730</jetty.version>
    </properties>

    <dependencies>
        <!-- Log4J Start -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId> …
Run Code Online (Sandbox Code Playgroud)

java eclipse maven

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

如何将 JavaFX SDK 直接捆绑到输出 jar 中?

目前,我在启动程序时使用 JVM 参数来查找 JavaFX 库,如下所示:

java -javaagent:lib/aspectjweaver-1.9.5.jar -javaagent:lib/spring-instrument-5.2.3.RELEASE.jar --module-path lib/javafx-sdk-13.0.2/lib --add-modules=javafx.controls -jar target/Some_Service-1.0.jar
Run Code Online (Sandbox Code Playgroud)

我的 POM.xml 的插件部分非常简单。除了 Docker 和 Launch4j 插件之外,我只有这个:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉Maven将整个lib目录(其中包含JavaFX库和aspectJ/spring仪器java代理)捆绑在jar中?这样做可以解决在我部署应用程序的任何地方都必须携带该 lib 文件夹的问题!谢谢!

******编辑******

我搞乱了 spring boot maven 插件选项,不幸的是我的 jar 仍然不包含我的文件夹:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <folders>
            <folder>lib</folder>
        </folders>
        <agent>lib/aspectjweaver-1.9.5.jar</agent>
        <agent>lib/spring-instrument-5.2.3.RELEASE.jar</agent>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

*****编辑2*****

我刚刚发现了一个很棒的库,它完全消除了对 -javaagent 参数的需要,而是让您在运行时以编程方式加载它们。看来我的类路径中存在 AspectJ 和 Spring-Instrument 也正是它所需要的!查看: https: //github.com/subes/invesdwin-instrument

我现在需要的是以某种方式将 JavaFX 运行时捆绑到我的 jar 中,而不是使用命令行参数从外部引用它。

java spring javafx libraries maven

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