尝试根据apache站点上的指导原则在 maven pom中设置自定义checkstyle配置在一个非常简单的情况下不起作用.
我创建了一个项目MyProject,使用Maven推荐的目录布局(即src/main/java /,src/main/resources),单个文件MyClass.java:
package com.myproject;
public class MyClass {
public static void main(String[] args) {
System.out.println("This line is longer than 80 characters which returns an error in sun_checks.xml, however my_checks.xml allows for much longer lines and will not return a long line error.");
}
}
Run Code Online (Sandbox Code Playgroud)
一个空的checkstyle文件,my_checks.xml:
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<module name="Checker">
<property name="severity" value="warning"/>
<module name="TreeWalker">
</module>
</module>
Run Code Online (Sandbox Code Playgroud)
和根据指南中的规格的pom文件:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myproject</groupId>
<artifactId>A_Project</artifactId>
<name>A Project</name> …Run Code Online (Sandbox Code Playgroud) 使用@ElementCollection时,load all正在加载对象的多个实例.更具体地说,它为collectionOfStrings中的每个元素加载一个实例.
例如,具有myClass的单个实例且具有collectionOfStrings.size()== 4的数据库,对加载所有MyClass值的调用将返回大小为4的List(所有相同的对象),而不是仅返回1个对象.
是否有一种简洁明了的方法可以解决这个问题,还是预期的行为?
// Parent class is a @MappedSuperclass which may or may not be relevant to the issue
@Entity
public class MyClass extends ParentClass {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ElementCollection(fetch=FetchType.EAGER)
@IndexColumn(name="indexColumn")
private List<String> collectionOfStrings;
// other instance variables, constructors, getters, setters, toString, hashcode and equals
}
public class MyClassDAO_Hibernate extends GenericHibernateDAO<MyClass, Long> implements MyClassDAO {
@Override
public List<MyClass> loadAll() {
List<MyClass> entityList = null;
Session session = getSession();
Transaction trans = session.beginTransaction();
entityList = …Run Code Online (Sandbox Code Playgroud) 我们正在构建一个工具(供内部使用),只有在从我们的源代码中删除javax.persistence.GeneratedValue注释时才会起作用(我们在工具中设置Id,由于GeneratedValue注释而被拒绝)......但是对于正常操作,我们需要这个注释.
如何在运行时删除Java Annotation(可能使用Reflection)?
这是我的班级:
@Entity
public class PersistentClass{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
// ... Other data
}
Run Code Online (Sandbox Code Playgroud)
这是我希望能够在运行时将其更改为:
@Entity
public class PersistentClass{
@Id
private long id;
// ... Other data
}
Run Code Online (Sandbox Code Playgroud)
可以在类本身上执行此操作:
// for some reason this for-loop is required or an Exception is thrown
for (Annotation annotation : PersistentClass.class.getAnnotations()) {
System.out.println("Annotation: " + annotation);
}
Field field = Class.class.getDeclaredField("annotations");
field.setAccessible(true);
Map<Class<? extends Annotation>, Annotation> annotations = (Map<Class<? extends Annotation>, Annotation>) field.get(PersistentClass.class);
System.out.println("Annotations size: " + annotations.size()); …Run Code Online (Sandbox Code Playgroud) Eclipse toString源生成器非常有用,除非对象包含Calendar对象.有没有办法更改Eclipse toString生成器以更干净地显示Calendar对象?可能使用常见的SimpleDateFormat?还是一个值得信赖的插件?
所需的日历toString("yyyy-MM-dd HH:mm:ss"):
2011-08-22 13:29:26
Run Code Online (Sandbox Code Playgroud)
示例Eclipse Calendar toString(这非常荒谬):
java.util.GregorianCalendar[time=1314034166984,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/New_York",offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=4,DAY_OF_MONTH=22,DAY_OF_YEAR=234,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=29,SECOND=26,MILLISECOND=984,ZONE_OFFSET=-18000000,DST_OFFSET=3600000]
Run Code Online (Sandbox Code Playgroud)
FuryComputers带领我找到了解决方案.这是一个快速而又脏的Custom toString实现:
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class MyToStringBuilder {
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
private String str;
private boolean isFirst;
public MyToStringBuilder(Object o) {
isFirst = true;
str = "";
str += o.getClass().getSimpleName() + " [";
}
public MyToStringBuilder appendItem(String variableName, Object value) {
if(value != null){
this.addItem(variableName, value.toString());
} else {
this.addItem(variableName, "null");
}
return this;
}
public MyToStringBuilder appendItem(String variableName, Calendar value) { …Run Code Online (Sandbox Code Playgroud) 在Eclipse中,您可以通过执行以下操作在相邻的子文件夹中创建具有所需依赖项的项目jar:
Export-> Java-> Runnable JAR文件
选择库处理选项:将所需库复制到生成的JAR旁边的子文件夹中
有没有办法用Maven程序集插件做到这一点?或者是否有另一个Maven插件更适合这项任务?
谢谢!
目标是根据屏幕方向(纵向或横向)以不同的布局在屏幕上显示两个片段(片段A,片段B).
当设备处于纵向模式时,使用滑动在UI之间切换时,一次只显示Frag A和Frag B中的一个.ViewPager非常适用于此.
当设备处于横向模式时,屏幕左侧显示Frag A,右侧显示Frag B. 一个简单的LinearLayout非常适用于此.
尝试同时在同一个应用程序中工作时会出现问题.似乎必须在Java源代码中引用ViewPager类(在onCreate方法中).这意味着在XML和源代码中都定义了一个UI元素......当设备处于横向模式时,这似乎是一个问题,并且不应该有ViewPager对象,但在源代码中引用了一个.我接近这个吗?如果一个布局使用ViewPager,那么每个其他布局是否需要ViewPager?
布局/ activity_mymain.xml
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyMainActivity" >
<!--
This title strip will display the currently visible page title, as well as the page
titles for adjacent pages.
-->
<android.support.v4.view.PagerTitleStrip
android:id="@+id/pager_title_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="#33b5e5"
android:paddingBottom="4dp"
android:paddingTop="4dp"
android:textColor="#fff" />
</android.support.v4.view.ViewPager>
Run Code Online (Sandbox Code Playgroud)
布局土地/ activity_mymain.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment android:name="com.example.ActionFragment"
android:id="@+id/action_fragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.example.SummaryFragment"
android:id="@+id/summary_fragment"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
来自MyMainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); …Run Code Online (Sandbox Code Playgroud) 使用Java FX,文本x和y坐标指的是文本的左下角。如何使坐标参考左上角?例如,如果在原点(0,0)处绘制了文本,则该文本将退出屏幕,但在这种情况下,我们希望将其显示在左上方。
public class JavaFxOriginText extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Group root = new Group();
Scene scene = new Scene(root, 100, 50, Color.WHITE);
primaryStage.setScene(scene);
primaryStage.show();
for(int i=0; i<5; i++) {
Text text = new Text(0, i*10, "Hello World! " + i);
text.setFill(Color.BLACK);
root.getChildren().add(text);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是显示中缺少“ Hello World!0”。
java ×4
maven ×2
android ×1
annotations ×1
checkstyle ×1
eclipse ×1
hibernate ×1
jar ×1
javafx ×1
persistence ×1
reflection ×1