我在自定义包层次结构中构建了一小组类,其中包含一个使用它们的控制台应用程序类.从JCreator和命令提示符一切正常.
我想构建一个重用同一个包的第二个控制台应用程序.
作为一个Java新手,最快,最脏的方法是什么?
我主要担心的是避免将包目录复制到新的控制台应用程序目录.
使用JCreator,我没有任何问题将包目录添加到项目并编译和运行.但是当我尝试从命令行运行控制台应用程序时,它无法在包层次结构中找到类.
在Visual Studio中,您只需添加引用...
这是“ SCJP模拟考试”中的一个示例问题:
给定默认的类路径:
/ foo
而这个目录结构:
Run Code Online (Sandbox Code Playgroud)foo | test | xcom |--A.class |--B.java和这两个文件:
Run Code Online (Sandbox Code Playgroud)package xcom; public class A { } package xcom; public class B extends A { }哪个允许B.java进行编译?(选择所有适用项。)
A.设置当前目录
xcom然后调用Run Code Online (Sandbox Code Playgroud)javac B.javaB.设置当前目录
xcom然后调用Run Code Online (Sandbox Code Playgroud)javac -classpath . B.javaC.设置当前目录进行测试然后调用
Run Code Online (Sandbox Code Playgroud)javac -classpath . xcom/B.javaD.设置当前目录进行测试然后调用
Run Code Online (Sandbox Code Playgroud)javac -classpath xcom B.javaE.设置当前目录进行测试然后调用
Run Code Online (Sandbox Code Playgroud)javac -classpath xcom:. B.java
答案是C,我不明白.那里的运算符的用法。请解释。
这本书说:
为了进行
B.java编译,编译器首先需要能够找到B.java。一旦找到B.java,就需要找到A.class。因为A.class在xcom软件包中,编译器无法找到A.class是否从xcom目录中调用了它。请记住, …
我想通过命令行调用添加类路径.电话看起来像这样:
java -cp ..\conf -jar ..\lib\switcher.jar
Run Code Online (Sandbox Code Playgroud)
conf目录中是一个XML文件,它定义应用程序上下文和log4j.properties文件.但是当我运行这个命令时,Java显然无法找到这两个文件,尽管我已将它们添加到类路径中.
我也尝试指定conf目录的绝对路径,但它也不起作用.
任何提示?
"java"如何知道要在不设置类path.ie的情况下执行的类文件.默认情况下是否检查当前目录,或者我们还需要为当前目录设置类路径.
我正在尝试在/src/main/resources/file.txt中读取我的maven项目中的文件.
我正在使用
URL url=this.getClass().getResource("/");
String filePath=url.getPath()+"file.txt";
Run Code Online (Sandbox Code Playgroud)
当通过eclipse运行时,url对象获取正确的值.
但是,当我打包jar并在命令行中运行它时:
jar -cp myjar.jar SampleTest
Run Code Online (Sandbox Code Playgroud)
它为'url'对象返回null并在下一行中抛出NullPointerException.
我使用文件浏览器打开了我的Jar文件并进行了检查.它在Jar内的"/"位置有'file.txt'.
我哪里错了?
为了实现可执行的jar文件,我将以下内容添加到pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>my.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
结果是(MANIFEST.MF)
...
Class-Path: library1-8.10-SNAPSHOT.jar hessian-4.0.7.jar library2-8.10-SNAPSHOT.jar json-lib-2.2.3-jdk15.jar ezmorph-1.0.6.jar library3-8.10-SNAPSHOT.jar commons-io-1.4.jar
...
Run Code Online (Sandbox Code Playgroud)
等等
这意味着,jar的版本包含在文件名中.我希望没有它:
Class-Path: library.jar hessian.jar library2.jar json-lib.jar ezmorph.jar library3.jar commons-io.jar
Run Code Online (Sandbox Code Playgroud)
只是因为这是他们在lib文件夹中命名的方式.
我们使用的是Maven 2.2,因此classpathLayoutType和customClasspathLayout不可用(如果他们有帮助的话).
有人可以帮忙吗?
这可能是一个简单的问题,但谷歌一无所获.
我仍然不明白为什么直接导入会起作用但是通配符不会.[编辑]通过类包我的意思是一个类包.我还是Java新手,所以我不知道语义[编辑]
我有一个类包:com.company.functions,当我尝试import com.company.*收到以下错误.
java: package com.company does not exist
Run Code Online (Sandbox Code Playgroud)
如果我com.company.function明确导入,那么我没有问题.
所以我想我有一个解决方案但是为了学习,有人可以解释为什么我会看到这个问题吗?
IDE:IntelliJ IDEA 12
import com.sociapathy.*; <--Throws compile error java: package com.sociapathy does not exist
import com.sociapathy.databaseAccess.MySQL; <--Works just fine
Run Code Online (Sandbox Code Playgroud) 我想在spring配置中配置推土机.当使用xml配置时,它就像
<bean class="org.dozer.spring.DozerBeanMapperFactoryBean">
<property name="mappingFiles" value="classpath*:dozer/**/*.dzr.xml"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
如何在配置文件中定义资源.我尝试使用ctx.getResource()但我无法访问Configuration类中的ApplicationContext.
我尝试了ContextRefreshedEvent并从那里添加资源,但仍然没有运气.(已调用afterPropertiesSet并且添加的映射不起作用)
public class ContextRefreshedEventBuilder extends ContextRefreshedEvent {
public ContextRefreshedEventBuilder(ApplicationContext ctx) {
super(ctx);
DozerBeanMapperFactoryBean mapper = ctx.getBean(DozerBeanMapperFactoryBean.class);
try {
mapper.setMappingFiles(ctx.getResources("classpath*:dozer/**/*.dzr.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
还尝试使用ClassPathResource但无法找到正确的方法
DozerBeanMapperFactoryBean mapper = new DozerBeanMapperFactoryBean();
mapper.setMappingFiles(new Resource[]{new ClassPathResource("classpath*:dozer/**/*.dzr.xml")});
return mapper;
Run Code Online (Sandbox Code Playgroud)
如何将ClassPathResource添加为映射位置?
- -回答 - -
@Bean
public DozerBeanMapperFactoryBean configDozer() throws IOException {
DozerBeanMapperFactoryBean mapper = new DozerBeanMapperFactoryBean();
Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:dozer/**/*.dzr.xml");
mapper.setMappingFiles(resources);
return mapper;
}
Run Code Online (Sandbox Code Playgroud) 请向我解释classpath,就像我10岁.
当我使用javac编译程序时,我通常会转到主类所在的根文件夹:
javac Test.java
Run Code Online (Sandbox Code Playgroud)
它编译程序和子目录中的所有类.对于上面的例子:
C:\newApp\ --->这是主类(Test.java)所在的文件夹.
C:\newApp\com\example\class --->这是其他一些类的文件夹.
javac使用该单个命令编译所有java文件.为他们制作.class文件.
现在我可以运行应用程序:
java Test
Run Code Online (Sandbox Code Playgroud)
什么是classpath?在这种情况下,classpath究竟是什么?我应该怎么知道classpath?使用IDE时,是否需要设置它?
Vaadin 14.1.0alpha4 通过其Maven配置自动包括Google Guava版本25库。请参阅左侧列出的以下屏幕截图。
但是在我自己的代码中,当引用Google Guava中的类时,IntelliJ将其标记为编译器错误。IntelliJ提供了“将库Guava添加到类路径”。在下面的屏幕截图中,请参见右侧的两个橙色箭头。
?为什么在我的Vaadin 14项目中列出的作为下载库列出的Guava尚未在类路径中?为什么番石榴对我的代码不可用?