标签: classpath

关于运行配置中的Eclipse和类路径的问题

我刚开始使用Log4J.我创建了一个log4j.properties文件并将其放在Eclipse的项目文件夹中.我还为我的应用程序创建了一个Run配置(它只是一个默认的Run配置,没有额外的选项).

现在,我尝试运行应用程序,并收到有关log4j无法初始化自身的错误消息(读取属性文件).我知道属性文件必须在类路径中,所以显然Run配置没有正确设置类路径.

如果我转到Run配置的Classpath选项卡,我有以下内容:

  • Bootstrap条目
  • 用户条目
    • MyApplication(默认类路径)
    • log4j-1.2.15.jar - C:\ Workspace\MyApplication\lib

但是,如果我手动添加项目的文件夹(我单击添加文件夹,高级,MyApplication),log4j将能够自己初始化.

为什么会这样?除非我手动添加项目的文件夹,为什么log4j找不到属性文件?默认情况下,这个文件夹不在类路径中吗?(以上输出表明它是.)

eclipse classpath

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

glassfish v3类路径设置

我正在开发glassfish v3上的j2ee应用程序,它将远程调用部署在jboss 5 app服务器上的EJB.为此,我的应用程序必须在类路径中有jboss客户端jar.我设法通过使用我的应用程序打包客户端jar文件来完成此操作,但这会通过aprox 10mb消耗大小,因此上传应用程序成为一个问题.

我怎么能把这些罐子放在别处,以便gf把它们拿起来所以我不需要把它们放在我的应用程序中?

glassfish classpath java-ee glassfish-3

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

Eclipse .classpath排除模式

我看到了这个:

<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
Run Code Online (Sandbox Code Playgroud)

在我的Eclipse .classpath文件中多次创建一个新的Maven项目时,但我似乎无法弄清楚 - 排除="**"的意思是什么?

编辑:我想我想在这里得到的是,虽然看起来像exclude ="**"应该排除src/main/resources中的所有内容,但是 - 它没有.当我创建一个测试项目并放入文件夹(例如:META-INF)时,它们实际上会显示在目标/类中.为什么?那么排除的重点是什么?

TIA

eclipse classpath m2eclipse

5
推荐指数
1
解决办法
7086
查看次数

为新注入的类设置类路径

上下文:一个新类说Bar,在运行时注入JVM.这个类属于com.foo这个包.对此类的引用将注入到属于同一包的另一个类中.每次加载时,新类可能都有不同的名称 - 因此不能将其指定为任何配置文件的一部分 - 例如,不能在build.xml中指定它作为jar文件的一部分包含在内.

问题:在类加载时,jvm会抛出一个错误 - java结果1.尽管我无法确定根本原因,但看起来类加载器找不到新注入的类.服务器以详细模式运行,该模式显示JVM加载的类列表,并且可以看到这个新注入的类已加载.

问题:新注入的类是否已经在类路径中?如果没有怎么设置呢?

[编辑] - 在问题中添加一些代码.

代码段 - 1:下面的代码段是从PreMain方法调用的 - Premain方法将由JVM代理调用,并将在运行时注入检测引用.Premain方法从一个方法中返回一个新类--Bar - 和一个对这个新类的引用 - returnsABool() - 在一个现有的类中 - ExistingClass.

public static void premain(String agentArgs, Instrumentation inst) {

        // 1. Create and load the new class - Bar
        String className = "Bar";
        byte [] b = getBytesForNewClass();
        //override classDefine (as it is protected) and define the class.
        Class clazz = null;
        try {
          ClassLoader loader = ClassLoader.getSystemClassLoader();
          Class cls = Class.forName("java.lang.ClassLoader");
          java.lang.reflect.Method method =
            cls.getDeclaredMethod("defineClass", …
Run Code Online (Sandbox Code Playgroud)

java classpath code-injection

5
推荐指数
1
解决办法
414
查看次数

从依赖于jar文件的命令行运行Java程序?

我有一个简单的Java文件Q.java,它依赖于外部库文件X.jar.Q.java和X.jar都在同一目录中.我可以通过执行以下命令从命令行编译Q.java:"javac -cp X.jar Q.java".这会生成一个Q.class文件.我该如何运行呢?我尝试了所有这些:

1)java Q 2)java -cp X.jar Q.

我一直在线程"main"中得到一个异常java.lang.NoClassDefFoundError:Q引起:java.lang.ClassNotFoundException:Q

那么我现在如何从命令行运行它,因为我有类文件?

java command-line jar javac classpath

5
推荐指数
1
解决办法
8312
查看次数

classpath错误:无法找到org.aspectj.lang.JoinPoint

我正在使用maven来构建我的项目.它早先成功编译.当我这样做时,它已经开始出错了mvn clean install.

[ERROR] classpath error: unable to find org.aspectj.lang.JoinPoint (check that aspectjrt.jar is in your classpath)

下面是我的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>com.guavus</groupId>
    <artifactId>Exporter</artifactId>
    <version>atlas2.1</version>
    <packaging>jar</packaging>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <aspectj.version>1.6.10</aspectj.version>
        <org.springframework.version>3.0.5.RELEASE</org.springframework.version>        
    </properties>

    <build>
         <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.0-beta-2</version>
                <configuration>
                    <reportPlugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-javadoc-plugin</artifactId>
                            <version>2.7</version>
                        </plugin>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-jxr-plugin</artifactId>
                            <version>2.1</version>
                            <configuration>
                                <aggregate>true</aggregate>
                            </configuration>
                        </plugin>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-surefire-report-plugin</artifactId>
                            <version>2.6</version>
                        </plugin>
                        <plugin>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>cobertura-maven-plugin</artifactId>
                            <version>2.4</version>
                            <configuration>
                                <formats>
                                    <format>xml</format>
                                    <format>html</format>
                                </formats>
                            </configuration>
                        </plugin>
                        <!--
                            plugin> <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-checkstyle-plugin</artifactId>
                            <version>2.6</version> </plugin …
Run Code Online (Sandbox Code Playgroud)

java classpath java-ee pom.xml maven

5
推荐指数
1
解决办法
9535
查看次数

Jmx客户端抛出InstanceNotFoundException

我有一个Jmx客户端,用于测试我写的jmx bean.这是客户端的代码:

    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8686/jmxrmi");
    JMXConnector jmxc = JMXConnectorFactory.connect(url, null);

    MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
    ObjectName mbeanName = new ObjectName("com.spmsoftware.processing.ping:type=ProcessingPing");

    ProcessingPing mbeanProxy = JMX.newMBeanProxy(mbsc, mbeanName, ProcessingPing.class, true);
    System.out.println("\nResult = " + mbeanProxy.ping(346, 0).getResultCode());

    jmxc.close();
Run Code Online (Sandbox Code Playgroud)

ProcessingPing及其所有依赖项都存在于IntelliJ库中.

我的jmx bean是:

    public interface ProcessingPing {

        public PingResult ping(Integer environmentId, Integer timeout);
    }
Run Code Online (Sandbox Code Playgroud)

和

    @Service("ProcessingPing")
    @ManagedResource(description = "")
    public class ProcessingPingImpl implements ProcessingPing {

        private static final Integer DEFAULT_TIMEOUT = 5000;

        @Autowired
        private PingProcessService pingProcessService;

        @Override
        @ManagedOperation(description = "")
        public PingResult ping(Integer environmentId, Integer …
Run Code Online (Sandbox Code Playgroud)

java client jmx classpath intellij-idea

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

Java忽略jar文件清单中的Class-Path条目

我已经搜索了互联网,也已经搜索了stackoverflow,发现很多帖子都在问这个问题,但是还没有一个具体的答案。


简短的版本是:我有一个jar文件,该文件引用清单中的其他jar文件。然后,我使用java -jar test.jar运行jar文件,但是它没有将jar依赖项添加到类路径中。


加长版:我做了一个小实验,以确认它对我的项目来说不是什么特别的事情。我在eclipse中创建了一个简单的Java项目,只有一个类。该类所做的只是将类路径写入std-out:

package test;

import java.net.URL;
import java.net.URLClassLoader;

public class Test {
  public static void main(String[] args){
    ClassLoader cl = ClassLoader.getSystemClassLoader();
    URL[] urls = ((URLClassLoader)cl).getURLs();
    for(URL url: urls){
      System.out.println("CP: "+url.getFile());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个“ lib”文件夹,并在其中放置了一个随机的jar文件,并将其添加到类路径中。现在,文件夹结构如下所示:

Test
|- src/test/Test.java
|- lib/mysql-connector-java-3.1.14-bin.jar
Run Code Online (Sandbox Code Playgroud)

现在,当我从Eclipse运行它时,将得到以下输出:

CP: /home/username/workspace/Test/bin/
CP: /home/username/workspace/Test/lib/mysql-connector-java-3.1.14-bin.jar
Run Code Online (Sandbox Code Playgroud)

好的,现在我使用Eclipse将项目导出到可运行的jar中。我选择选项“将所需的库复制到生成的jar旁边的子文件夹中”。

这将创建以下结构:

/tmp/Test
|- test.jar
|- test_lib/mysql-connector-java-3.1.14-bin.jar
Run Code Online (Sandbox Code Playgroud)

如果查看由Eclipse创建的Test.jar,它看起来像这样:

test.jar
|- test/Test.class
|- META-INF/MANIFEST.MF
Run Code Online (Sandbox Code Playgroud)

MANIFEST.MF的内容是:

Manifest-Version: 1.0
Class-Path: . test_lib/mysql-connector-java-3.1.14-bin.jar
Main-Class: test.Test
Run Code Online (Sandbox Code Playgroud)

是的,在Main-Class属性后面有一个空行(我之所以提到这一点,是因为有些人在网上发布原因可能是结尾处缺少换行符)。

因此,一切看起来都很好。我使用java -jar test.jar运行它并获得以下输出:

CP: /tmp/Test/test.jar
Run Code Online (Sandbox Code Playgroud)

因此,类路径 …

java eclipse jar manifest classpath

5
推荐指数
1
解决办法
2151
查看次数

在类路径上添加属性文件

我正在构建一个基于Spring Boot的Spring独立应用程序.我希望这个应用程序从一个独立目录中的jar文件之外的属性文件中读取它的属性.构建的应用程序的结构如下所示

testApplication
??? test-1.0-SNAPSHOT.jar
??? lib
?   ??? <dependencies are here>
??? conf
    ??? application.properties
Run Code Online (Sandbox Code Playgroud)

我想在classpath上加载application.properties文件,所以我能够在我的应用程序中读取.可能吗?因为当我像这样运行我的jar文件时(在Windows上):

java -cp "./*;lib/*;conf/*" com.myapp.Test
Run Code Online (Sandbox Code Playgroud)

我得到以下的例外:

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.myapp.Test]; nested exception is java.io.FileNotFoundException: class path resource [application.properties] cannot be opened because it does not exist
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:180)
...
Caused by: java.io.FileNotFoundException: class path resource [application.properties] cannot be opened because it does not exist       
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
Run Code Online (Sandbox Code Playgroud)

我尝试通过此类注释从应用程序中读取文件:

@PropertySource("classpath:application.properties")
Run Code Online (Sandbox Code Playgroud)

Java文档没有提到,可以在类路径上加载非jar文件,但如果这个application.properties在jar文件test-1.0-SNAPSHOT.jar中,则可以通过这种方式访问​​它.

是否可以将外部非jar文件放在类路径上?我知道我不一定在classpath上有文件,我可以通过不同的方式访问它,但我仍然很好奇,如果可能的话.

java spring classpath

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

Maven exec:java运行可执行插件依赖jar导致NPE

我正在制作一个使用sparql端点服务的maven应用程序.我想有一个maven目标来下载sparql端点并启动服务,但似乎maven在配置类路径时遇到一些问题.

我在https://mvnrepository.com/artifact/com.blazegraph/bigdata-jar上使用了blazegraph及其工件.

这是我在pom.xml中的插件配置:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.bigdata.rdf.sail.webapp.StandaloneNanoSparqlServer</mainClass>
                <includePluginDependencies>true</includePluginDependencies>
                <includeProjectDependencies>false</includeProjectDependencies>
                <executableDependency>
                    <groupId>com.blazegraph</groupId>
                    <artifactId>blazegraph-jar</artifactId>
                </executableDependency>
                <addOutputToClasspath>false</addOutputToClasspath>
            </configuration>
            <dependencies>
                <!-- https://mvnrepository.com/artifact/com.blazegraph/blazegraph-jar -->
                <dependency>
                    <groupId>com.blazegraph</groupId>
                    <artifactId>blazegraph-jar</artifactId>
                    <version>2.1.4</version>
                    <scope>runtime</scope>
                    <type>jar</type>
                </dependency>
            </dependencies>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

调试输出提示插件无法找到工件:

Caused by: java.lang.NullPointerException
at org.codehaus.mojo.exec.AbstractExecMojo.findExecutableArtifact(AbstractExecMojo.java:278)
at org.codehaus.mojo.exec.ExecJavaMojo.determineRelevantPluginDependencies(ExecJavaMojo.java:650)
at org.codehaus.mojo.exec.ExecJavaMojo.addRelevantPluginDependenciesToClasspath(ExecJavaMojo.java:568)
at org.codehaus.mojo.exec.ExecJavaMojo.getClassLoader(ExecJavaMojo.java:520)
at org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.java:301)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
... 27 more
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

编辑1 这个问题不是什么是NullPointerException的副本,我该如何解决?因为Maven抛出异常,因为它无法在依赖项列表中找到正确的工件(但它应该).

编辑2 感谢@Sean Patrick Floyd,我已经部分解决了这个问题.我想,类路径配置中仍然存在一些问题.现在Maven找到了主类和jar,但是在执行之后我在编译代码中得到了另一个NPE.查看blazegraph的开源代码,似乎无法打开可执行jar内的资源.

以下是导致NPE的行:

System.setProperty("jetty.home",
            jettyXml.getClass().getResource("/war").toExternalForm());
Run Code Online (Sandbox Code Playgroud)

https://github.com/blazegraph/database/blob/master/bigdata-jar/src/main/java/com/bigdata/rdf/sail/webapp/StandaloneNanoSparqlServer.java#L142

classpath nullpointerexception maven-3 maven exec-maven-plugin

5
推荐指数
1
解决办法
1402
查看次数